webentwicklung-frage-antwort-db.com.de

Symfony2: Wie übergebe ich URL-Abfrageparameter an Controller?

Vielleicht fehlt mir etwas, aber es scheint keine Möglichkeit zu geben, Querystring-Parameter in Routen in Symfony2 zu definieren, damit sie an einen Controller übergeben werden können.

Anstatt beispielsweise einen URI wie /blog/my-blog-post (Aus Symfony2s Routing-Dokumentation ) zu generieren und an die folgende Route zu übergeben:

# app/config/routing.yml    
blog_show:
    pattern:   /blog/{slug}
    defaults:  { _controller: AcmeBlogBundle:Blog:show }

Ich würde es vorziehen, einen URI wie /blog?slug=my-blog-post Zu generieren. Das Problem ist, dass ich den Parameter slug in der Routenkonfigurationsdatei nirgends finden kann (wie das Gegenstück {slug} oben).

Vielleicht ist dies absichtlich, aber was ist dann die beste Vorgehensweise für die Arbeit mit GET-Parametern im Querystring?

In der Dokumentation werden sie in Generieren von URLs mit Abfragezeichenfolgen erwähnt. Wie können sie also an den Controller übergeben werden?

Wo ich sie erwähnen kann, ist Symfony2 und HTTP Fundamentals :

use Symfony\Component\HttpFoundation\Request;

$request = Request::createFromGlobals();

// retrieve GET variables
$request->query->get('foo');

Ist dies die beste Vorgehensweise für die Arbeit mit ihnen innerhalb des Controllers?

19
jcroll

So arbeiten Sie mit GET/POST - Parametern in einem Controller, der Symfony\Bundle\FrameworkBundle\Controller\Controller erweitert:

public function updateAction()
{
    $request = $this->getRequest();
    $request->query->get('myParam'); // get a $_GET parameter
    $request->request->get('myParam'); // get a $_POST parameter
    ...
}

Deklarieren Sie für einen Controller, der den Symfony-Basis-Controller nicht erweitert, das Anforderungsobjekt als Parameter der Aktionsmethode und gehen Sie wie oben beschrieben vor:

public function updateAction(Request $request)
{
    $request->query->get('myParam'); // get a $_GET parameter
    $request->request->get('myParam'); // get a $_POST parameter
    ...
}
46
redbirdo

Sie können Ihre Abfragezeichenfolgenparameter nicht in den Routing-Konfigurationsdateien angeben. Sie erhalten sie einfach vom $ request-Objekt in Ihrem Controller: $request->query->get('foo'); (wird null sein, wenn es nicht existiert).

Und um eine Route mit einem bestimmten Parameter zu generieren, können Sie dies in Ihren twig Vorlagen tun:

{{ path(route, query|merge({'page': 1})) }}

Wenn Sie in Ihrem Controller eine Route generieren möchten, verhält es sich wie in der Dokumentation, die Sie verlinkt haben:

$router->generate('blog', array('page' => 2, 'category' => 'Symfony'));

erzeugt die Route /blog/2?category=Symfony (die in der Routendefinition nicht vorhandenen Parameter werden als Abfragezeichenfolgen übergeben).

28
Nanocom