web-dev-qa-db-fra.com

Symfony2/Twig traitant de l'obtention des valeurs de chaîne de requête d'URL

J'essaie de manipuler les valeurs de la chaîne de requête dans une URL.

Je peux obtenir l'URL ou la route actuels à partir de l'objet Request ou des fonctions de Twig, mais c'est la chaîne de requête avec laquelle je me bats.

Je n'ai pas besoin d'app.request.attributes.get ('_ route_params') car cela récupère les paramètres de la chaîne de requête figurant dans la route.

J'ai besoin d'obtenir des paramètres de chaîne de requête qui se trouvent réellement dans l'URL.

Je souhaite pouvoir effectuer les deux opérations énumérées ci-dessous dans Symfony2 (dans un contrôleur PHP) et dans Twig (dans un modèle Twig):

  1. Obtenir toutes les valeurs de chaîne de requête actuelles dans l'URL et les afficher

  2. Faites 1, mais changez l'une des valeurs de la chaîne de requête avant de les afficher 

Je ne trouve personne qui sache faire ça.

23
user2143356

Vous pouvez utiliser app.request.query.all pour obtenir vos chaînes de requête.

Si vous voulez changer un paramètre dans Twig, vous pouvez le faire

{% set queryParams = app.request.query.all %}
{% set queryParams = queryParams|merge({queryKey: newQueryValue}) %}
49
Thomas Potaire

Dans le contrôleur

use Symfony\Component\HttpFoundation\Request;

public function fooAction(Request $request)
{
  $params = $request->query->all();
}

s'il vous plaît, faites attention : $request->query->all(); retournera un tableau avec les clés nommées comme paramètres de requête

En brindille

Tant que vous passez du contrôleur (lisez ceci comme toujours), vous pouvez transmettre vos paramètres à une vue de cette façon

use Symfony\Component\HttpFoundation\Request;

public function fooAction(Request $request)
{
  $params = $request->query->all();
  return $this->render('MyFooBundle:Bar:foobar.html.twig', array('params' => $params));
}

Dans votre modèle twig foobar.html.twig, vous pouvez accéder à tous les paramètres de chaîne de requête en utilisant simplement la variable params

par exemple, avec cette URL de demande: http://example.com/?foo=bar&secondfoo=secondbar

{% for paramName, paramValue in params %}
  <div>{{ paramName }}: {{ paramValue }}</div>
{% endfor %}
<div>{{ params.secondfoo }}</div>

sortie de brindille: 

<div>foo: bar</div>
<div>secondfoo: secondbar</div>
<span>secondbar</span>

Une autre méthode consiste à utiliser app.request.query.all dans twig, sans rien transmettre à twig depuis votre contrôleur.

Note finale

Si vous souhaitez modifier l'un de ces paramètres lors du passage d'un tableau à votre brindille depuis votre contrôleur, modifiez simplement l'une des valeurs du tableau, comme vous le feriez avec des valeurs normales (à savoir: $params['id'] = $params['id'] - 1;)

4
DonCallisto

Pour obtenir la chaîne de requête " https://stackoverflow.com?name=jazz "

{{ app.request.query.get('name') | default('default value if not set'); }}
2
Jasbir Rana

Bonjour Stephen, nous avons essayé votre solution pour obtenir la valeur mais sa valeur par défaut. http: // localhost: 4000/about/investor/details-dates-et-evenements-details? year = 2017 # q1

j'ai utilisé comme ça sur mon fichier de brindille

S'il vous plaît, faites-moi savoir.

0
Rocker