2013-07-31 8 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']; 

는 아는 사람 있나요 잘못된?

(심포니의 2.2.4) 내가 내 양식의 수집 필드의 바로 프로토 타입 속성을 렌더링함으로써 후있어 무엇을 얻을 수있는 것 같다

+0

당신이 allow_add가 있습니까 = 사실이 때 컬렉션에 추가됩니다? http://symfony.com/doc/current/cookbook/form/form_collections.html – Cerad

+0

예, 언급 했어야합니다. 양식이 페이지에서 실제로 사용되고 잘 작동합니다. AJAX를 통해 첫 번째 양식의 컬렉션에서 select에 추가 옵션을 추가하는 두 번째 형식이 있습니다. 추가 항목을 추가 할 때 새로 추가 된 옵션을 사용할 수 있도록 컬렉션의 프로토 타입을 업데이트하려고합니다. – 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

이 폼은 개별적인 필드 요소를 포함하는'children' 속성을 가지고있는 또 다른'FormView' 객체를 가지고있는 것처럼 보입니다. 또한 그것의 고유 한'vars' 속성도 있지만 생성 된 HTML은 없습니다. 프로토 타입 문자열이 뷰 렌더러의 어딘가에서 생성되는지 궁금 해서요, 그냥 찾을 수 없습니다 ... – Kris

+0

올바른 경우,이'FormView' 블록을 가져 와서 구현하는'FormRenderer'를 사용하여 렌더링해야합니다. 'Symfony \ Component \ Form \ FormRendererInterface' –