OK, c’est une question de débutant, mais je ne trouve la réponse nulle part. Dans un contrôleur de Symfony2, je souhaite accéder à la valeur POST depuis l’un de mes formulaires. Dans le contrôleur j’ai:
public function indexAction() { $request = $this->get('request'); if ($request->getMethod() == 'POST') { $form = $this->get('form.factory')->create(new ContactType()); $form->bindRequest($request); if ($form->isValid()) { $name_value = $request->request->get('name');
Malheureusement, $name_value
ne retourne rien. Qu’est-ce que je fais mal? Merci!
cette solution est obsolète depuis la version 2.3 et sera supprimée dans la version 3.0, voir la documentation
$form->getData();
vous donne un tableau pour les parameters du formulaire
extrait du livre symfony2 page 162 (Chapitre 12: Formulaires)
[…] parfois, vous pouvez simplement vouloir utiliser un formulaire sans classe et récupérer un tableau des données soumises. C’est vraiment très facile:
public function contactAction(Request $request) { $defaultData = array('message' => 'Type your message here'); $form = $this->createFormBuilder($defaultData) ->add('name', 'text') ->add('email', 'email') ->add('message', 'textarea') ->getForm(); if ($request->getMethod() == 'POST') { $form->bindRequest($request); // data is an array with "name", "email", and "message" keys $data = $form->getData(); } // ... render the form }
Vous pouvez également accéder aux valeurs POST (dans ce cas “name”) directement via l’object request, comme ceci:
$this->get('request')->request->get('name');
Soyez averti, cependant, que dans la plupart des cas, l’utilisation de la méthode getData () est un meilleur choix, car elle renvoie les données (généralement un object) après leur transformation par le framework de formulaire.
Lorsque vous souhaitez accéder au jeton de formulaire, vous devez utiliser la réponse de Problématique $postData = $request->request->get('contact');
parce que getData()
supprime l’élément du tableau
depuis 2.3 vous devez utiliser handleRequest
au lieu de bindRequest
:
$form->handleRequest($request);
voir la documentation
Les valeurs de publication du formulaire sont stockées sous le nom du formulaire dans la demande. Par exemple, si vous avez remplacé la méthode getName()
de ContactType () pour renvoyer “contact”, procédez comme suit:
$postData = $request->request->get('contact'); $name_value = $postData['name'];
Si vous avez toujours des problèmes, essayez de faire un var_dump()
sur $request->request->all()
pour voir toutes les valeurs de publication.
Ce qui a fonctionné pour moi était d’utiliser ceci:
$data = $request->request->all(); $name = $data['form']['name'];
Il y a une astuce avec la méthode ParameterBag::get()
. Vous pouvez définir le paramètre $deep
sur true
et accéder à la valeur nestede profonde requirejse sans variable supplémentaire:
$request->request->get('form[some][deep][data]', null, true);
Vous avez également la possibilité de définir une valeur par défaut (2ème paramètre de la méthode get()
), elle peut éviter les isset($form['some']['deep']['data'])
redondants isset($form['some']['deep']['data'])
.
Les données de champ sont accessibles dans un contrôleur avec: Listing 12-34
$form->get('dueDate')->getData();
De plus, les données d’un champ non mappé peuvent également être modifiées directement: Listing 12-35
$form->get('dueDate')->setData(new \DateTime());
page 164 livre symfony2 (généré le 9 octobre 2013)
J’accède au paramètre ticketNumber de ma demande de publication en plusieurs parties de la manière suivante.
$data = $request->request->all(); $ticketNumber = $data["ticketNumber"];
Je pense que pour obtenir les données de la requête, liées et validées par l’object formulaire, vous devez utiliser:
$form->getClientData();
Si vous êtes débutant, bienvenue à Symfony2, un projet open-source. Si vous voulez apprendre beaucoup, vous pouvez ouvrir le source!
De “Form.php”:
getData () getNormData () getViewData ()
Vous pouvez trouver plus de détails dans ce fichier.