218 votes

Comment récupérer les paramètres de la requête dans Symfony 2 ?

Je suis très novice en matière de symfony. Dans d'autres langages comme java et autres, je peux utiliser request.getParameter('parmeter name') pour obtenir la valeur.

Y a-t-il quelque chose de similaire que nous pouvons faire avec symfony2.
J'ai vu quelques exemples mais aucun ne fonctionne pour moi. Supposons que j'ai un champ de formulaire dont le nom est nom d'utilisateur . Dans l'action du formulaire, j'ai essayé d'utiliser quelque chose comme ceci :

$request = $this->getRequest();
$username= $request->request->get('username'); 

J'ai également essayé

$username = $request->getParameter('username');

et

$username=$request->request->getParameter('username');

Mais aucune des options ne fonctionne, alors que les options suivantes fonctionnent bien :

foreach($request->request->all() as $req){
    print_r($req['username']);
}

Où est-ce que je me trompe en utilisant getParameter() méthode. Toute aide sera appréciée.

0 votes

Vous avez une coquille à la ligne 2 : $request->request-get() devrait être $request->request->get() . Est-ce que ça pourrait être ça ?

0 votes

J'ai écrit la même chose dans le code. J'ai raté quelque chose ici. Désolé pour la faute de frappe ici.

0 votes

Avez-vous (a) vérifié le manuel pour vous assurer que get() est la méthode correcte et (b) a activé les notifications PHP afin que vous puissiez voir s'il y a des problèmes ? (c) Est-ce que Symfony 2 a une barre d'outils de débogage comme symfony 1, afin que vous puissiez voir si vous avez fait des erreurs ?

451voto

Cerad Points 13840

La dénomination n'est pas si intuitive que cela :

use Symfony\Component\HttpFoundation\Request;

public function updateAction(Request $request)
{
    // $_GET parameters
    $request->query->get('name');

    // $_POST parameters
    $request->request->get('name');

Mise à jour Nov 2021 : $request->get('name') a été déprécié dans la version 5.4. et sera privé à partir de la version 6.0. Son utilisation a été découragée depuis un certain temps.

46 votes

C'est différent de ce que PHP utilise, mais c'est plus logique. $_GET Les données sont des données provenant de la chaîne de requête (pas de GET demande nécessaire) et $_POST les données sont des données provenant du corps de la demande (il ne doit pas nécessairement s'agir d'une POST demande soit, pourrait être PUT ).

5 votes

J'ai essayé $request->query->get('name') ; mais cela ne fonctionne pas non plus.

7 votes

Comment obtenir les paramètres d'une demande PUT ?

34voto

pkout Points 1267

Je le fais encore plus simplement :

use Symfony\Component\HttpFoundation\Request;

public function updateAction(Request $request)
{
    $foo = $request->get('foo');
    $bar = $request->get('bar');
}

Une autre option consiste à introduire vos paramètres dans la définition de votre fonction d'action :

use Symfony\Component\HttpFoundation\Request;

public function updateAction(Request $request, $foo, $bar)
{
    echo $foo;
    echo $bar;
}

qui suppose alors que vous avez défini {foo} et {bar} comme faisant partie de votre modèle d'URL dans votre fichier routing.yml :

acme_myurl:
    pattern:  /acme/news/{foo}/{bar}
    defaults: { _controller: AcmeBundle:Default:getnews }

0 votes

Et dans le premier exemple, si j'ai foo à la fois dans la chaîne de requête et dans le corps du POST, lequel sera retourné par $request->get('foo') ?

2 votes

On dirait que la priorité est GET, PATH, POST. api.symfony.com/master/Symfony/Component/HttpFoundation/

0 votes

C'est la meilleure réponse

21voto

ScoRpion Points 2924

Vous pouvez utiliser le code suivant pour obtenir les valeurs des champs de votre formulaire.

use Symfony\Component\HttpFoundation\Request;

public function updateAction(Request $request)
{
    // retrieve GET and POST variables respectively
    $request->query->get('foo');
    $request->request->get('bar', 'default value if bar does not exist');
}

Ou vous pouvez également obtenir toutes les valeurs du formulaire sous forme de tableau en utilisant

$request->request->all()

3 votes

$request->request->all() fonctionne pour moi mais quelque chose comme $request->query->get('foo') ; ne fonctionne pas.

13voto

Martin Points 31

Essayez

$request->request->get('acme_demobundle_usertype')['username']

inspecter le nom de l'attribut de votre champ formulaire

1 votes

+1, car je pense que de toutes les réponses, seule celle-ci énonce réellement la chose non évidente - dans les cas où vous avez créé vos formulaires automatiquement avec l'aide du constructeur de formulaires de Symfony, Symfony renomme le champ du formulaire en quelque chose de plus que ce à quoi vous vous attendiez. Comme name="acme_demobundle_userform[field_name]"

0 votes

La syntaxe que vous mentionnez ici ne fonctionne pas avec php 5.3.10. Quelle est la version minimale pour supporter cela ?

2 votes

@justinasLelys try $userType = $request->request->get('acme_demobundle_usertype') ; $username = $userType['username'] ;

9voto

A l'intérieur d'un contrôleur :

$request = $this->getRequest();
$username = $request->get('username');

6 votes

Dans les nouvelles versions de Symfony, $this->getRequest() est déprécié, au profit de l'injection de la requête dans l'action du contrôleur, par exemple : public function showAction(Request $request, $id);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X