¿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 somePage
valor?
php
symfony
routing
symfony-routing
IlyaDoroshin
fuente
fuente
Con ramita:
{{ app.request.attributes.get('_route') }}
fuente
<body class="{{ app.request.get('_route') | replace({'_' : '-'}) }}">
para aplicar CSS específico de la página :)Creo que esta es la forma más fácil de hacer esto:
fuente
{% render "SomeBundle:SomeController:someAction" %}
, donde obtendrá el valor '_internal' nuevamente.Symfony 2.0-2.1
Use esto:
Ese no te dará
_internal
.Actualización para Symfony 2.2+: Esto no funciona a partir de Symfony 2.2+. Abrí un error y la respuesta fue "por diseño". Si desea obtener la ruta en una sub-acción, debe pasarla como argumento
Y tu controlador:
fuente
$route['_route']
parece problemático pero podría no ser de lo que habla el desarrollador de Symfony. El libro de cocina no menciona acerca_route
de la$router->match()
producción ..$router->match()
dice "@return array Una matriz de parámetros" que parece muy interno. No quiero confiar en ello, pero en este momento, parece ser la única solución viable cuando se trata de solicitudes secundarias.No existe 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 realizó 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 :
Puede hacer una extensión de ramita de esto si lo necesita en plantillas.
fuente
_route
No es el camino a seguir y nunca fue . Siempre fue para 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 renderizado parcial.Debe inyectar el nombre de su ruta como parámetro en su controlador, consulte el documento aquí
Además, nunca lo 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), así que$request->attributes->get('_route');
en este caso.fuente
Puede obtener el nombre de ruta del objeto de solicitud desde el controlador.
fuente
Todo lo que obtengo 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();
fuente
$view['request']->getParameter('_route');
{% render... %}
llamadas constandalone=true
. Con el almacenamiento en caché (AppCache.php o barniz con ESI) habilitado, esto hará que las vistas independientes se soliciten con una solicitud HTTP separada (aquí es donde_internal
entra en juego la ruta ) para que se pueda almacenar en caché de forma independiente.Con Symfony 3.3, he usado este método y funciona bien.
Tengo 4 rutas como
Y solo una línea hace una clase activa para todas las rutas.
fuente
Para obtener la ruta actual basada en la URL (más confiable en caso de reenvío):
fuente
Con Symfony 4.2.7, puedo implementar lo siguiente en mi plantilla de ramita, que muestra el nombre de ruta personalizado que definí en mi (s) controlador (es).
En index.html.twig
En mi controlador
El resultado imprime "article_list" en la página deseada en mi navegador.
fuente
Para cualquiera que necesite una ruta actual para Symfony 3, esto es lo que uso
fuente
si desea obtener el nombre de la ruta en su controlador, entonces tiene que inyectar la solicitud (en lugar de obtener del contenedor debido a la ACTUALIZACIÓN de Symfony y luego llamar a get ('_ route').
si desea obtener el nombre de la ruta en la rama, entonces debe obtenerlo como
fuente
$request->get()
directamente porque es lento: github.com/symfony/http-foundation/blob/2.8/Request.php#L712