2012-07-24 34 views
1

我做的非常相似,這個食譜例如http://symfony.com/doc/current/cookbook/form/dynamic_form_generation.html#adding-an-event-subscriber-to-a-form-class添加實體字段類型,形成與事件訂閱類

的主要區別是,我的字段類型是一個實體,而不是文本類型的東西。

所以,我的領域用戶preSetData方法是這樣的:

public function preSetData(DataEvent $event) 
{ 
    $data = $event->getData(); 
    $form = $event->getForm(); 

    if (null === $data) { 
     return; 
    } 

    if(!$data->getIsCategorized()){ 

     $form->add(

      $this->factory->createNamed('categories', 'entity', array(
      'class' => 'My\PostBundle\Entity\Category', 
      'property'  => 'name', 
      'multiple'  => true, 
      'label' => 'Category' 
      ) 
      ) 
     ); 
    } 
} 

如果我直接在我的表單類型與$builder->add('categories, 'entity', array(...新增的實體這是給下面的錯誤

Class does not exist 
500 Internal Server Error - ReflectionException 

它工作正常

是否有可能以這種方式使用字段事件訂閱者將實體字段類型附加到表單上?

回答

1

我遇到了同樣的問題,實際上這是因爲出廠> createNamed()方法比builder->添加 第三個參數是不是選項陣列更說法,而是一個「數據「的說法。

因此,這裏是你應該做的:

$form->add(

     $this->factory->createNamed('categories', 'entity', null, array(
     'class' => 'My\PostBundle\Entity\Category', 
     'property'  => 'name', 
     'multiple'  => true, 
     'label' => 'Category' 
     ) 
     ) 
    ); 

(選項排列前加空)

0

無論你是在類型中還是通過事件監聽器/訂戶添加一個字段都沒有區別。您可能在某處(可能)有一個小錯誤,或者這是一個錯誤,在這種情況下,您應該將其提交到the issue tracker