2011-10-27 74 views
3

我實際上在學習Symfony2,我遇到了問題。我在電影和演員之間有很多很多的關係。實體與Symfony2關係形成問題多對多

我已經創建了一個表單來創建一個新電影。在這種形式中,我有一個選擇參數來選擇參與者,但是當我選擇多個參與者時,表單會生成一個錯誤「該值不應該爲空」。當我在actor類中刪除我的斷言時,我沒有這個錯誤。 爲什麼我的表單檢查演員類中的斷言?

/* 
     * 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'; 
    } 
} 

回答

0

驗證通過向類添加一組規則(稱爲約束)來完成。所以你的表單會查看你放入相關類中的斷言來檢查提交的數據是否有效。檢查Forms一章。

還有一件事:作爲"required" option的實體字段默認設置爲「true」。只要將它設置爲false,如果你真的想要它。

+0

並且正如官方文檔所說,必需僅用於通過HTML5屬性進行客戶端驗證。 –