2013-02-12 32 views
1

我有一個產品表與產品可以與一個或多個部門相關聯的產品部門表具有一對多關係。如何驗證OneToMany實體表單集合?

我在添加新產品以驗證我的部門時出現問題。

如果我沒有選擇部門,表格仍然會驗證並提交。

這裏是我建立窗體的地方。

class NewProductType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('departments', 'collection', array(
      'type' => new ProductDepartmentType(), 
      'required' => true, 
     )); 
... 

集合是通過ProductDepartmentType類設置:

class ProductDepartmentType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('department', 'entity', array(
      'property' => 'indentedName', 
      'class' => 'WebIllumination\SiteBundle\Entity\Department', 
      'query_builder' => function(EntityRepository $er) { 
       return $er->createQueryBuilder('d') 
        ->addSelect('dd') 
        ->leftJoin('d.descriptions', 'dd') 
        ->orderBy('d.displayOrder', 'ASC'); 
      }, 
      'required' => true, 
      'empty_value' => '- Select a Department -', 
     ), array()); 
     $builder->add('displayOrder', 'hidden'); 
    } 

    public function getDefaultOptions(array $options) 
    { 
     $collectionConstraint = new Collection(array(
      'department' => array(
       new NotBlank(array('message' => 'Select a department.')), 
      ), 
     )); 

     return array(
      'validation_constraint' => $collectionConstraint, 
     ); 
    } 

    public function getName() 
    { 
     return 'site_product_department'; 
    } 
} 

然後我嘗試添加以下到ProductDepartmentType:

class ProductDepartmentType extends AbstractType 
{ 
... 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'WebIllumination\SiteBundle\Entity\ProductToDepartment' 
     )); 
    } 
... 

這並沒有影響和形式尚可提交時未經驗證。

任何人都可以幫助我瞭解如何驗證此字段?

回答