2013-07-31 3 views
0

Je n'arrive pas à obtenir l'attribut prototype d'une collection de formulaires dans un contrôleur pour inclusion dans une réponse JSON, le plus éloigné (c'est-à-dire qu'aucune erreur n'est levée) est le suivant, mais la valeur renvoyée est vide.Comment récupérer l'attribut prototype d'une collection de formulaires à partir d'un contrôleur (Symfony2)?

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

J'ai aussi essayé de créer le point de vue de la forme, et en tirant l'attribut à partir de là, mais la clé prototype n'est pas définie ici ...

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

Est-ce que quelqu'un sait où je vais faux?

(Symfony 2.2.4)

+0

Avez-vous une allow_add = true lorsque la collection est ajouté? http://symfony.com/doc/current/cookbook/form/form_collections.html – Cerad

+0

Oui, j'aurais dû mentionner: Le formulaire est effectivement utilisé sur une page et fonctionne bien. J'ai un deuxième formulaire pour ajouter d'autres options à un choix dans la collection du premier formulaire, via AJAX. Je souhaite mettre à jour le prototype de la collection afin que les options nouvellement ajoutées soient disponibles lorsque des éléments supplémentaires sont ajoutés. – Kris

+0

Okay. Je n'ai pas essayé ça. Mais au lieu d'essayer de changer le prototype dans votre contrôleur, pensez à transmettre les informations nécessaires à votre type de formulaire et demandez-lui d'ajouter les modifications. – Cerad

Répondre

1

Il semble que je peux obtenir ce que je suis après en rendant simplement l'attribut prototype du champ de collecte de ma forme, cela se sent comme long chemin, mais Ça marche.

// 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

Cela semble contenir un autre objet 'FormView', qui a alors une propriété' children' contenant les éléments de champ individuels, il a aussi sa propre propriété 'vars', mais pas de code HTML généré. Je me demande si la chaîne du prototype est générée quelque part dans le rendu de la vue, je ne la trouve pas ... – Kris

+0

Correct, vous devrez alors prendre ce bloc 'FormView' et le rendre en utilisant un' FormRenderer' qui implémente le 'Symfony \ Component \ Form \ FormRendererInterface' –

Questions connexes