route php symfony routing symfony-routing

php - symfony router absolute url



¿Cómo obtener la ruta actual en Symfony 2? (12)

Con Symfony 3.3, he usado este método y funciona bien.

Tengo 4 rutas como

admin_category_index, admin_category_detail, admin_category_create, admin_category_update

Y solo una línea hace una clase activa para todas las rutas.

<li {% if app.request.get(''_route'') starts with ''admin_category'' %} class="active"{% endif %}> <a href="{{ path(''admin_category_index'') }}">Product Categoires</a> </li>

¿Cómo obtengo la ruta actual en Symfony 2?

Por ejemplo, routing.yml :

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

¿Cómo puedo obtener este valor de somePage ?


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


Creo que esta es la forma más fácil de hacer esto:

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


De algo que es ContainerAware (como un controlador):

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


No hay una solución que funcione para todos los casos de uso. Si utiliza el método $ request-> get (''_ route''), o sus variantes, devolverá ''_internal'' para los casos en que se produjo el reenvío.

Si necesita una solución que funcione incluso con el reenvío, debe usar el nuevo servicio RequestStack, que llegó en 2.4, pero esto interrumpirá el soporte de ESI :

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

Puedes hacer una extensión de ramita con esto si la necesitas en plantillas.


Para cualquiera que necesite una ruta actual para Symfony 3, esto es lo que uso

<?php $request = $this->container->get(''router.request_context''); //Assuming you are on user registration page like https://www.yoursite.com/user/registration $scheme = $request->getScheme(); //This will return https $host = $request->getHost(); // This will return www.yoursite.com $route = $request->getPathInfo(); // This will return user/registration(don''t forget this is registrationAction in userController ?>


Para obtener la ruta actual basada en la URL (más confiable en caso de reenvíos):

public function getCurrentRoute(Request $request) { $pathInfo = $request->getPathInfo(); $routeParams = $this->router->match($pathInfo); $routeName = $routeParams[''_route'']; if (substr($routeName, 0, 1) === ''_'') { return; } unset($routeParams[''_route'']); $data = [ ''name'' => $routeName, ''params'' => $routeParams, ]; return $data; }


Todo lo que _internal de eso es _internal

Obtengo el nombre de la ruta desde dentro de un controlador con $this->getRequest()->get(''_route''). Incluso el código tuxedo25 sugiere devoluciones _internal

Este código se ejecuta en lo que se llamó un ''Componente'' en Symfony 1.X; No es el controlador de una página, sino parte de una página que necesita algo de lógica.

El código equivalente en Symfony 1.X es: sfContext::getInstance()->getRouting()->getCurrentRouteName();


si quieres obtener el nombre de la ruta en tu controlador, entonces debes inyectar la solicitud (en lugar de obtener un contenedor debido a la actualización de Symfony y la llamada get (''_ route'').

public function indexAction(Request $request) { $routeName = $request->get(''_route''); }

Si desea obtener el nombre de la ruta en ramita del que tiene que obtener como

{{ app.request.attributes.get(''_route'') }}


_route no es el camino a seguir y nunca fue . Siempre se hizo con fines de depuración de acuerdo con Fabien, quien creó Symfony. No es confiable ya que no funcionará con cosas como el reenvío y otras llamadas directas a los controladores, como el procesamiento parcial.

Debe insertar el nombre de su ruta como un parámetro en su controlador, consulte el documento aquí

Además, nunca use $request->get(''''); si no necesita la flexibilidad, es mucho más lento que usar get en la bolsa de propiedades específica que necesita (atributos, consulta o solicitud), por lo que $request->attributes->get(''_route''); en este caso.


Symfony 2.0-2.1
Utilizar esta:

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

Esa no te dará _internal .

Actualización para Symfony 2.2+: esto no funciona al iniciar Symfony 2.2+. Abrí un bug y la respuesta fue "por diseño". Si desea obtener la ruta en una sub-acción, debe pasarla como un argumento

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

Y tu controlador:

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


$request->attributes->get(''_route'');

Puede obtener el nombre de la ruta desde el objeto de solicitud desde el controlador.