2013-07-31 57 views
0

我無法在控制器中獲取表單集合的原型屬性以包含在JSON響應中,我得到的最遠(即沒有錯誤被引發)與以下內容相關,但是返回值爲空。如何從控制器(Symfony2)中檢索表單集合的原型屬性?

$form  = $this->createForm(new MyType()); 
$prototype = $form->get('myCollection')->getConfig()->getAttribute('prototype'); 

我也試着創建窗體的觀點,並從那裏拉屬性,但是prototype鍵沒有此處定義...

$form  = $this->createForm(new MyType()); 
$view  = $form->createView(); 
$prototype = $view->children['myCollection']->vars['attr']['prototype']; 

有誰知道我要去哪裏錯誤?

(Symfony的2.2.4)

+0

你有allow_add =真時集合添加? http://symfony.com/doc/current/cookbook/form/form_collections.html – Cerad

+0

是的,我應該提到:該表單實際上在頁面上使用,並且工作正常。我有第二種形式,通過AJAX將更多選項添加到第一個表單的集合中。我想更新集合的原型,以便在添加其他項目時可以使用新添加的選項。 – Kris

+0

好的。我沒有嘗試過。但是不要試圖改變控制器中的原型,而應考慮將必要的信息傳遞給您的表單類型並添加更改。 – Cerad

回答

1

看來我能得到什麼,我通過渲染只是我的表單的收藏領域的原型屬性之後我,這種感覺就像很長的路要走左右,但有用。

// Controller method 
$form  = $this->createForm(new MyType()); 
$view  = $form->createView()->children['myCollection']; 
$prototype = $this->renderView('MyBundle:Foo:prototype.html.twig', array('form' => $view)); 
<!-- Template (MyBundle:Foo:prototype.html.twig) --> 
{{ form_widget(form.vars.prototype) }} 
0

$prototype = $view->children['myCollection']->vars['prototype'];

+0

這似乎包含另一個'FormView'對象,它具有包含單個字段元素的'children'屬性,它也具有其自己的'vars'屬性,但沒有生成HTML。我想知道如果原型字符串是在視圖渲染器的某個地方生成的,我只是找不到它... – Kris

+0

正確的話,你需要採用這個'FormView'塊並使用'FormRenderer'來渲染它, 'Symfony \ Component \ Form \ FormRendererInterface' –

相關問題