エンティティは、Symfony2との関係を多面的に形成する

私は実際にSymfony2を学んでおり、問題があります。私は映画と俳優の間に多くの関係を持っています。

私は新しい映画を作るためのフォームを作成しました。このフォームではアクターを選択するための入力が選択されていますが、多くのアクターを選択するとフォームに「この値を空白にしないでください」というエラーが生成されました。アクタークラスでアサーションを削除すると、このエラーは発生しません。 なぜ私のフォームは私の俳優クラスのアサートをチェックするのですか?

    /*
       *  MOVIE CLASS
       *
       */    
    class Movie
        {
            //...


            /**
             * @ORM\ManyToMany(targetEntity="Actor", inversedBy="movies")
             * @ORM\JoinTable(name="movie_actor")
             */
            protected $actors;
        }

       /*
       *  ACTOR CLASS
       *
       */

        class Actor
        {

            /**
             * @ORM\Column(type="string", length="255")
             * @Assert\NotBlank()
             * @Assert\MinLength(3)
             */
            protected $firstName;

            /**
             * @ORM\Column(type="string", length="255")
             * @Assert\NotBlank()
             * @Assert\MinLength(3)
             */
            protected $lastName;

            /**
             * @ORM\Column(type="date", nullable = true)
             */
            protected $birthday;

            /**
             * @ORM\Column(type="boolean")
             * @Assert\NotBlank()
             */
            protected $sexe;


            /**
             * @ORM\ManyToMany(targetEntity="Movie", mappedBy="actors")
             * @Assert\NotNull()
             */
            protected $movies;
        }


/**
*
* MOVIE FORM 
*/
class MovieType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('title')
            ->add('description')
            ->add('category')
            ->add('actors', 'entity',  
            array(
                'class' => 'MyAppFilmothequeBundle:Actor',
                'query_builder' => function(EntityRepository $er)
                    {
                        return $er->createQueryBuilder('a')->orderBy('a.firstName', 'ASC');
                    },
                 'multiple' => true
            ))
            ->add('user')
        ;
    }

    public function getDefaultOptions(array $options)
    {
        return array(
        'data_class' => 'MyApp\FilmothequeBundle\Entity\Movie');
    }
    public function getName()
    {
        return 'movie';
    }
}
3
追加された
ビュー: 4

1 答え

バリデーションは、一連のルール(制約と呼ばれる)をクラスに追加することによって行われます。したがって、あなたのフォームは、提出されたデータが有効かどうかをチェックするために関連クラスに置かれたアサーションを調べます。 フォームの章を確認してください。

もう1つ:必須のオプションデフォルトでは「true」に設定されます。あなたが本当にそれを望むならば、それをfalseに設定してください。

0
追加された
また、公式のドキュメントにも述べられているように、requiredは、HTML5属性を必要とするクライアント側の検証にのみ使用されます。
追加された 著者 i.am.michiel,