OK, ceci 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 à partir de 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 renvoie 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 documentation
$form->getData();
vous donne un tableau pour les paramètres de formulaire
from livre symfony2 page 162 (chapitre 12: Formulaires)
[...] parfois, vous souhaiterez peut-être simplement 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, "nom") directement via l'objet de requête, comme suit:
$this->get('request')->request->get('name');
Toutefois, sachez que, dans la plupart des cas, la méthode getData () est un meilleur choix, car elle renvoie les données (généralement un objet) après leur transformation par le formulaire.
Lorsque vous souhaitez accéder au jeton de formulaire, vous devez utiliser la réponse de Problematic $postData = $request->request->get('contact');
car le getData()
supprime l'élément du tableau.
depuis 2.3, vous devriez utiliser handleRequest
au lieu de bindRequest
:
$form->handleRequest($request);
Les valeurs de publication de formulaire sont stockées sous le nom du formulaire dans la demande. Par exemple, si vous avez substitué la méthode getName()
de ContactType () pour renvoyer "contact", procédez comme suit:
$postData = $request->request->get('contact');
$name_value = $postData['name'];
Si vous rencontrez 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 utilisait ceci:
$data = $request->request->all();
$name = $data['form']['name'];
Il y a un truc avec la méthode ParameterBag::get()
. Vous pouvez définir paramètre $deep
sur true
et accéder à la valeur imbriquée profonde requise sans variable supplémentaire:
$request->request->get('form[some][deep][data]', null, true);
Aussi, vous avez la possibilité de définir une valeur par défaut (2ème paramètre de la méthode get()
,), cela évite les appels 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 de symfony2 (généré le 9 octobre 2013)
J'accède au paramètre ticketNumber pour ma demande de publication multipart de la manière suivante.
$data = $request->request->all();
$ticketNumber = $data["ticketNumber"];
Je pense que pour obtenir les données de la demande, liées et validées par l'objet formulaire, vous devez utiliser:
$form->getClientData();