web-dev-qa-db-ger.com

Symfony2/Twig, das sich mit dem Abrufen von URL-Abfragezeichenfolgen befasst

Ich versuche, die Abfragezeichenfolgenwerte in einer URL zu ändern.

Ich kann die aktuelle URL oder die Route entweder aus dem Request-Objekt oder den Twig-Funktionen abrufen, aber es ist die Abfragezeichenfolge, mit der ich zu kämpfen habe.

Ich brauche app.request.attributes.get ('_ route_params') nicht, da dies die Abfragezeichenfolge-Parameter erhält, die in der Route enthalten sind.

Ich muss Abfragezeichenfolgeparameter abrufen, die sich tatsächlich in der URL befinden.

Ich möchte in der Lage sein, die beiden nachfolgend aufgeführten Funktionen in Symfony2 (in einem PHP - Controller) und in Twig (in einer Twig-Vorlage) auszuführen:

  1. Rufen Sie alle aktuellen Abfragezeichenfolgenwerte in der URL ab und zeigen Sie sie an

  2. Tun Sie 1, ändern Sie jedoch einen der Abfragezeichenfolgen, bevor Sie sie anzeigen 

Ich kann niemanden finden, der weiß, wie das geht.

23
user2143356

Sie können app.request.query.all verwenden, um Ihre Abfragezeichenfolgen abzurufen.

Wenn Sie einen Parameter in Twig ändern möchten, können Sie dies tun

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

In den Controller

use Symfony\Component\HttpFoundation\Request;

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

bitte, Achtung : $request->query->all(); gibt ein Array mit Schlüsseln zurück, die als Abfrageparameter bezeichnet werden

In den Zweig

Solange Sie vom Controller aussteigen (lesen Sie dies wie immer), können Sie Ihre Parameter auf diese Weise an eine Ansicht übergeben

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

In Ihrer Zweigvorlage foobar.html.twig können Sie einfach auf alle Parameter der Abfragezeichenfolge zugreifen, indem Sie die Variable params verwenden. 

z. B. mit dieser Anforderungs-URL: http://example.com/?foo=bar&secondfoo=secondbar

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

zweigausgabe: 

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

Eine andere Methode ist, app.request.query.all in twig zu verwenden, ohne etwas von Ihrem Controller an twig weiterzuleiten.

Schlussnote

Wenn Sie einen dieser Parameter ändern möchten, wenn Sie ein Array an einen Zweig übergeben, ändern Sie einfach einen der Array-Werte wie bei normalen Werten (d. H .: $params['id'] = $params['id'] - 1;)

4
DonCallisto

Um die Abfragezeichenfolge " https://stackoverflow.com?name=jazz " zu erhalten

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

Hallo Stephen, wir haben deine Lösung ausprobiert, um den Wert zu erhalten, aber es wird auf den Standardwert gesetzt. http: // localhost: 4000/about/investoren/wichtige daten-und-ereignisdetails? jahr = 2017 # q1

ich habe so auf meiner Zweigdatei verwendet

Lass es mich wissen, bitte.

0
Rocker