2013-04-08 54 views
0

我想爲了與自己的模板,以使其延長採集表...的Symfony如何延長收集表單字段

class ContactFieldType extends AbstractType 
{ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
    $resolver->setDefaults(array(
     'collection' => array('type' => new ContactType()) 
    )); 
    } 

    public function getParent() 
    { 
    return 'collection'; 
    } 

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

我以這種方式使用此類型:

$builder->add('contacts',new ContactFieldType(), array(
    'label_attr' => array('class' => 'contacts') 
)); 

,我發現了以下錯誤:

The form's view data is expected to be of type scalar, array or an instance of \ArrayAccess, but is an instance of class MyApp\MainBundle\Entity\Contact. You can avoid this error by setting the "data_class" option to "MyApp\MainBundle\Entity\Contact" or by adding a view transformer that transforms an instance of class MyApp\MainBundle\Entity\Contact to scalar, array or an instance of \ArrayAccess.

,如果我用這個:

$builder->add('contacts','collection', array(
    'type' => new ContactType(), 
    'label_attr' => array('class' => 'contacts') 
)); 

它工作正常。

我不想按照建議執行這一data_class ...我想延長收集部件

回答

1

您的表單定義似乎很好,不需要更多的修修補補。你的問題在於實例。

從我所看到的,我相信你實例化表單或多或少的那樣:

$model = new ParentClass(); 
$model->setContacts(new Contact()); 

$form = $this->createForm(new ParentFormType(), $model)); 

然而,收集表單類型不使用聯繫()情況下工作,但一這種情況的數組。

用Contact()實例代替這些對象的數組提供實例後,代碼將失敗。你需要做的是:

$model = new ParentClass(); 
$model->setContacts(array(new Contact())); 

$form = $this->createForm(new ParentFormType(), $model)); 

雖然這是我相信你這樣做,所以它仍然很難說,如果我在你還沒有提交instanciation代碼。如果問題依然存在,我建議你提供它。