web-dev-qa-db-ja.com

Symfony 3.0の場合、タイプ「string」、「Vendor \ NameBundle \ Form \ EntitynameType」の期待される引数

Symfonyバージョン2.7で発生した問題(プロジェクトのインストール直後の404ページエラー)のため、Symfonyバージョン3.0を使い始めました。いくつかのマイナーな問題の後、私は「app/console」が「bin/console」に置き換えられていることを理解しました。だから私は今新しいプロジェクトに取り組んでいて、1つのエンティティと呼ばれる新しいバンドルをすでに構築しています

Codeit/RestaurantBundle && CodeitRestaurantBundle:Reserveren

Formatis annotationであり、エンティティには"naam"(string、255 )。スキーマを更新し、Codeitのエンティティを生成しました。その後、正常に完了した後、書き込みアクションを使用してクラッドを生成しました。形式は再び注釈および接頭辞は/ reserverenでした。

したがって、web/reserverenページにアクセスすると、エンティティの表示ページが表示されます。残念ながら、新しいエントリを追加しようとすると、次のエラーが発生します。

タイプ「string」、「Codeit\RestaurantBundle\Form\ReserverenType」の期待される引数が指定されました

My Bundle/Form/ReserverenType.php

<?php

namespace Codeit\RestaurantBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class ReserverenType extends AbstractType
{
/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('naam')
    ;
}

/**
 * @param OptionsResolver $resolver
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'Codeit\RestaurantBundle\Entity\Reserveren'
    ));
}
}

私のエンティティコード

<?php

namespace Codeit\RestaurantBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Reserveren
 *
 * @ORM\Table(name="reserveren")
 * @ORM\Entity(repositoryClass="Codeit\RestaurantBundle\Repository\ReserverenRepository")
 */
class Reserveren
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="Naam", type="string", length=255)
     */
    private $naam;


    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set naam
     *
     * @param string $naam
     *
     * @return Reserveren
     */
    public function setNaam($naam)
    {
        $this->naam = $naam;

        return $this;
    }

    /**
     * Get naam
     *
     * @return string
     */
    public function getNaam()
    {
        return $this->naam;
    }


}
15
Gijsberts

3.0ではフォームがかなり変更されています。あなたは今のところ2.8にこだわるほうがいいかもしれません。

表示しませんでしたが、エラーメッセージに基づいて、コントローラーコードは次のようになっていると思います。

$form = $this->createForm(new ReservernType(), $item);

それが2.xのやり方です。 3.xの場合:

$form = $this->createForm(ReservernType::class, $item);

http://symfony.com/doc/current/book/forms.html#creating-form-classes

27
Cerad

試してください:

$builder
        ->add('naam', TextType::class);
        // If you use PHP 5.3 or 5.4 you must use
        // ->add('naam','Symfony\Component\Form\Extension\Core\Type\TextType')

これの代わりに

$builder
    ->add('naam');

useステートメントを追加します。

use Symfony\Component\Form\Extension\Core\Type\TextType;

モチベーションアップグレードガイド から:

タイプ名は廃止され、Symfony 3.0で削除されます。タイプを名前で参照する代わりに、完全修飾クラス名(FQCN)で参照する必要があります。 PHP 5.5以降では、「クラス」定数を使用できます:

この助けを願っています

2
Matteo

このようにしてみてください:

/.../

use Symfony\Component\Form\Extension\Core\Type\TextType; 

/.../

class ReserverenType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
           $builder->add('naam', TextType::class);
    }
}
1
scoolnico