2013-10-04 22 views
0

我有這個表單生成器:Symfony2,驗證嵌入和非嵌入形式具有相同的參數和不同的結果?

public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('task', 'text', array('label' => 'Task')) 
       ->add('dueDate', 'date', array('label' => 'Date', 'format' => 'ddMMMMyyyy')) 
       ->add('category', 'entity', array('required' => true, 'multiple' => true, 'class' => 'AcmeTaskBundle:Category', 'query_builder' => function($repository) { return $repository->createQueryBuilder('c')->orderBy('c.id', 'ASC'); },)) 
       ->add('save', 'submit', array('label' => 'Send')); 
    } 

和它的作品的成功與此控制器:

if($form->isValid()) 
{ 
    $this->get('session')->getFlashBag()->add(
     'success', 
     'Task successfuly added' 
    ); 
    $em = $this->getDoctrine()->getManager(); 
    foreach($form->get('category')->getData() as $cat) 
    { 
     $task->removeCategory($cat); 
     $task->addCategory($cat); 
    } 
    $em->persist($task); 
    try { 
     $em->flush(); 
    } catch (\PDOException $e) { 
     // sth 
    } 
} 

如果我試圖嵌入我的字段類別這樣的形式:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('task', 'text', array('label' => 'Task')) 
      ->add('dueDate', 'date', array('label' => 'Date', 'format' => 'ddMMMMyyyy')) 
      ->add('category', new CategoryType()) 
      ->add('save', 'submit', array('label' => 'Send')); 
} 

其中CategoryType類似於:

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     //'data_class' => 'Acme\TaskBundle\Entity\Category', 
     'csrf_protection' => true, 
    )); 
} 

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('name', 'entity', array(
        'class' => 'AcmeTaskBundle:Category', 
        'query_builder' => function($repository) { return $repository->createQueryBuilder('c')->orderBy('c.id', 'ASC'); }, 
        //'property' => 'name', 
        'multiple' => true, 
        'required' => true, 
       )); 
} 

它返回給定類別expected,ArrayCollection的Exception實例。 爲什麼「相同」表格只有在沒有嵌入的情況下才能使用?

回答

1

這兩種類型是不一樣的。在第一種情況下,您使用選項'multiple' => true,這意味着表單期望收集類別實體。從你的控制器中,我發現你有(一個|許多)到多個關係的任務類別。此處的類別是類別實體的ArrayCollection,因此您的表單正在工作。

在第二種情況下,您有->add('category', new CategoryType())這意味着類別可以是唯一的,根據您的控制器和任務實體它是不正確的。您需要在這裏創建CategoryType()的集合。

->add('category', 'collection', array('type' => new CategoryType())) 

此外,我認爲你必須提供更多的選項,以適應你的應用這一行。

+0

我使用多對多的關係。許多任務都不是一個類別。 –

+0

沒關係。你有(一|多)對多關係。你有很多種類。 –

+0

是的,這是真的。我會嘗試一下,現在我無法訪問我的電腦,我的文件在哪裏。那麼我會給你提供的信息。 –