249 Stimmen

Wie erhält man die aktuelle Route in Symfony 2?

Wie erhalte ich die aktuelle Route in Symfony 2?

Zum Beispiel, routing.yml :

somePage:
   pattern: /page/
   defaults: { _controller: "AcmeBundle:Test:index" }

Wie kann ich das bekommen? somePage Wert?

348voto

tuxedo25 Punkte 4768

Von etwas, das ContainerAware ist (wie ein Controller):

$request = $this->container->get('request');
$routeName = $request->get('_route');

194voto

Matthieu Punkte 2289

Mit Twig : {{ app.request.attributes.get('_route') }}

48voto

supernova Punkte 896

Ich denke, das ist der einfachste Weg, dies zu tun:

class MyController extends Controller
{
    public function myAction($_route)
    {
        var_dump($_route);
    }

    .....

29voto

jsgoupil Punkte 3690

Symfony 2.0-2.1
Verwenden Sie dies:

    $router = $this->get("router");
    $route = $router->match($this->getRequest()->getPathInfo());
    var_dump($route['_route']);

Diese wird pas Sie erhalten _internal .

Update für Symfony 2.2+: Dies funktioniert nicht ab Symfony 2.2+. Ich öffnete eine Fehler und die Antwort lautete "absichtlich". Wenn Sie die Route in einer Unteraktion erhalten möchten, müssen Sie sie als Argument übergeben

{{ render(controller('YourBundle:Menu:menu', { '_locale': app.request.locale, 'route': app.request.attributes.get('_route') } )) }}

Und Ihr Controller:

public function menuAction($route) { ... }

22voto

K. Norbert Punkte 10316

Es gibt keine Lösung, die für alle Anwendungsfälle geeignet ist. Wenn Sie die Methode $request->get('_route') oder ihre Varianten verwenden, es wird '_intern' zurückgegeben für Fälle, in denen eine Weiterleitung stattgefunden hat.

Wenn Sie eine Lösung benötigen, die auch mit Weiterleitung funktioniert, müssen Sie den neuen RequestStack-Dienst verwenden, der in 2.4 erschienen ist, aber das wird kaputtgehen ESI-Unterstützung :

$requestStack = $container->get('request_stack');
$masterRequest = $requestStack->getMasterRequest(); // this is the call that breaks ESI
if ($masterRequest) {
    echo $masterRequest->attributes->get('_route');
}

Sie können daraus eine Zweigverlängerung machen, wenn Sie sie in Vorlagen benötigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X