2015-12-26 35 views
1

我正在嘗試使用symfony2表單CollectionType與兩個實體之間的onetoMany關係構建表單。但它始終以無效參數異常結束無法加載類型「Symfony \ Component \ Form \ Extension \ Core \ Type \ CollectionType」。 我有兩個實體叫做票和附件。票有很多附件,每個附件都與單張票有關。Symfony2表單集合無法加載類型CollectionType

在門票實體:

/** 
* @ORM\OneToMany(targetEntity="Attachment", mappedBy="ticket", fetch="EXTRA_LAZY", cascade={"persist"}) 
*/ 
private $attachments; 

而且在連接實體:

/** 
* @var integer 
* @ORM\ManyToOne(targetEntity="Ticket", inversedBy="attachments", fetch="LAZY") 
* @ORM\JoinColumn(name="ticket_id", referencedColumnName="id") 
*/ 
private $ticket; 

AttachmentType形式:

/** 
* @param FormBuilderInterface $builder 
* @param array $options 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('name') 
     ->add('file') 
    ; 
} 

/** 
* @param OptionsResolverInterface $resolver 
*/ 
public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'Attachment' 
    )); 
} 

TicketType形式:

public function buildForm(FormBuilderInterface $formBuilderInterface, array $options){ 
    $formBuilderInterface 
     ->add("subject", "text", array(
       "label"=>"RaiseTicketType.labels.subject.label", 
       "attr" => array(
        "class" => "ui-flat", 
        "placeholder"=>"RaiseTicketType.labels.subject.label" 
       ) 
      ) 
     ) 
     ->add("attachments", CollectionType::class, array(
       'entry_type' => AttachmentType::class, 
       'allow_add' => true, 
       'allow_delete' => true 
      ) 
     ); 
    ; 
} 

public function setDefaultOptions(OptionsResolverInterface $optionsResolverInterface){ 
    $optionsResolverInterface->setDefaults(array(
     'data_class' => 'Ticket' 
    )); 
} 

我已經導入CollectionType命名空間

+0

需要用戶更換附件字段的完全限定類名的data_class:http://symfony.com/doc/current/book/forms.html#creating-form-classes – Cerad

回答

3

以上實現是symfony的(3.0)的最新版本,這裏是實施symfony的版本低於3.0。只需要與

->add("attachments", "collection", array(
       'type' => new AttachmentType(), 
       'allow_add' => true, 
       'allow_delete' => true, 
       'by_reference' => false 
      ) 
     ); 
+1

請請注意,將表單類型實例傳遞給集合類型的'type'屬性是個不錯的主意。這個解決方案的意義在於,對於每種嵌入類型,Symfony必須再次解析表單類型,這可能會對性能產生實際影響。相反,在Symfony 2.8之前,您應該[將您的表單類型註冊爲服務](http://symfony.com/doc/2.7/book/forms.html#defining-your-forms-as-services)並將名稱用於替代該別名。 – xabbuh

相關問題