web-dev-qa-db-fra.com

Accéder aux valeurs POST dans l'objet de requête Symfony2

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!

94
Acyra

Symfony 2.2

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.


Symfony 2.3

depuis 2.3, vous devriez utiliser handleRequest au lieu de bindRequest:

 $form->handleRequest($request);

voir documentation

99
timaschew

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.

126
Problematic

ce qui a fonctionné pour moi utilisait ceci:

$data = $request->request->all();
$name = $data['form']['name'];
38
ramzey

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']).

17
Dmitriy

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)

8
meteor

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"];
7
Ilker Baltaci

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();

1
Chicna