web-dev-qa-db-fra.com

Comment obtenir les paramètres de requête dans symfony2

Je suis très nouveau à Symfony. Dans d'autres langages comme Java et d'autres, je peux utiliser request.getParameter('parmeter name') pour obtenir la valeur.

Y a-t-il quelque chose de similaire que nous puissions faire avec symfony2.
J'ai vu des exemples, mais aucun ne fonctionne pour moi. Supposons que j'ai un champ de formulaire avec le nom 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 aussi essayé

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

et

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

Mais aucune des options ne fonctionne. Cependant, la suite a bien fonctionné:

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

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

193
darhamid

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

use Symfony\Component\HttpFoundation\Request;

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

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

Je le fais encore plus simple:

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 que vous avez défini {foo} et {bar} dans le modèle d’URL de votre fichier routing.yml:

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

Vous pouvez utiliser le code suivant pour obtenir les valeurs de vos champs de 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 de formulaire sous forme de tableau en utilisant

$request->request->all()
17
ScoRpion

essayer

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

inspecter le nom d'attribut de votre champ de formule

12
MartinW.

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

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

Vos options:

  1. Facile:
    • $request->request->get('param') ($_POST['param']) ou
    • $request->query->get('param') ($_GET['param'])
  2. Bons formulaires Symfony avec toutes les validations, transormations de valeurs et rendus de formulaires avec erreurs et nombreuses autres fonctionnalités:
  3. Quelque chose entre les deux (voir exemple ci-dessous)
<?php
/**
 * @Route("/customers", name="customers")
 *
 * @param Request $request
 * @return Response
 */
public function index(Request $request)
{
    $optionsResolver = new OptionsResolver();
    $optionsResolver->setDefaults([
        'email' => '',
        'phone' => '',
    ]);
    $filter = $optionsResolver->resolve($request->query->all());

    /** @var CustomerRepository $customerRepository */
    $customerRepository = $this->getDoctrine()->getRepository('AppBundle:Customer');

    /** @var Customer[] $customers */
    $customers = $customerRepository->findFilteredCustomers($filter);

    return $this->render(':customers:index.html.twig', [
        'customers' => $customers,
        'filter' => $filter,
    ]);
}

En savoir plus sur OptionsResolver - http://symfony.com/doc/current/components/options_resolver.html

9
luchaninov

Comme maintenant _ la méthode $this->getRequest() est obsolète, vous devez injecter un objet Request dans l'action de votre contrôleur comme ceci:

public function someAction(Request $request)

après cela, vous pouvez utiliser l'un des éléments suivants.

Si vous voulez extraire POST les données de la requête, utilisez ce qui suit:

$request->request->get('var_name');

mais si vous voulez récupérer des données GET à partir d'une requête, utilisez ceci:

$request->query->get('var_name');
8
Ashish Awasthi

Vous pouvez le faire ceci:

$clientName = $request->request->get('appbundle_client')['clientName'];

Parfois, lorsque les attributs sont protégés, vous ne pouvez pas avoir accès pour obtenir la valeur de la méthode d'accès courante:

(POSTER)

 $clientName = $request->request->get('clientName');

(OBTENIR)

$clientName = $request->query->get('clientName');

(GÉNÉRIQUE)

$clientName = $request->get('clientName');
6
Yoander

La plupart des cas tels que l'obtention d'une chaîne de requête ou de paramètres de formulaire sont traités dans les réponses ci-dessus.

Lorsque vous travaillez avec des données brutes, comme une chaîne JSON brute dans le corps que vous souhaitez utiliser comme argument pour json_decode(), la méthode Request::getContent() peut être utilisée.

$content = $request->getContent();

Des informations utiles supplémentaires sur les requêtes HTTP dans Symfony sont disponibles dans la documentation du package HttpFoundation .

2
use Symfony\Component\HttpFoundation\Request;

public function indexAction(Request $request, $id) {

    $post = $request->request->all();

    $request->request->get('username');

}

Merci, vous pouvez également utiliser le code ci-dessus

1
Meet
$request = Request::createFromGlobals();
$getParameter = $request->get('getParameter');
1
Manuel M.

Essayez ça, ça marche

$this->request = $this->container->get('request_stack')->getCurrentRequest();

Cordialement

0
AchrafSoltani
public function indexAction(Request $request)
{
   $data = $request->get('corresponding_arg');
   // this also works
   $data1 = $request->query->get('corresponding_arg1');
}
0
abhinand

Pour les utilisateurs de symfony 4:

$query = $request->query->get('query');
0
Smith

Si vous avez besoin d'obtenir la valeur d'un select, vous pouvez utiliser:

$form->get('nameSelect')->getClientData();
0
sncardonam