Como obtenho a rota atual no Symfony 2?
Por exemplo routing.yml
:
somePage:
pattern: /page/
defaults: { _controller: "AcmeBundle:Test:index" }
Como posso obter esse somePage
valor?
php
symfony
routing
symfony-routing
IlyaDoroshin
fonte
fonte
Com o Twig:
{{ app.request.attributes.get('_route') }}
fonte
<body class="{{ app.request.get('_route') | replace({'_' : '-'}) }}">
para aplicar css específico da página :)Eu acho que essa é a maneira mais fácil de fazer isso:
fonte
{% render "SomeBundle:SomeController:someAction" %}
, onde você obterá o valor '_internal' novamente.Symfony 2.0-2.1
Use isto:
Aquele não vai te dar
_internal
.Atualização para o Symfony 2.2+: Isso não está funcionando ao iniciar o Symfony 2.2+. Abri um bug e a resposta foi "por design". Se você deseja obter a rota em uma sub-ação, deve transmiti-la como argumento
E seu controlador:
fonte
$route['_route']
parece problemático, mas pode não ser o que o symfony dev fala. O livro de receitas não menciona cerca_route
de$router->match()
saída ..$router->match()
diz "@return array Uma matriz de parâmetros" que parece muito interna. Não quero confiar nisso, mas, no momento, parece ser a única solução viável ao lidar com sub-solicitações.Não há solução que funcione para todos os casos de uso. Se você usar o método $ request-> get ('_ route') ou suas variantes, ele retornará '_internal' para os casos em que o encaminhamento ocorreu.
Se você precisar de uma solução que funcione mesmo com o encaminhamento, precisará usar o novo serviço RequestStack, que chegou na 2.4, mas isso interromperá o suporte ESI :
Você pode fazer uma extensão de galho, se precisar nos modelos.
fonte
_route
não é o caminho a percorrer e nunca foi . Sempre foi feito para fins de depuração, de acordo com Fabien, que criou o Symfony. Não é confiável, pois não funcionará com coisas como encaminhamento e outras chamadas diretas para controladores, como renderização parcial.Você precisa injetar o nome da sua rota como parâmetro no seu controlador, consulte o documento aqui
Além disso, nunca use
$request->get('');
se você não precisar da flexibilidade, pois é muito mais lento do que usar get no pacote de propriedades específico que você precisa (atributos, consulta ou solicitação), portanto$request->attributes->get('_route');
, neste caso.fonte
Você pode obter o nome da rota do objeto de solicitação de dentro do controlador.
fonte
Tudo o que estou obtendo disso é
_internal
Eu recebo o nome da rota de dentro de um controlador com
$this->getRequest()->get('_route').
Até o código tuxedo25 sugerido retorna_internal
Esse código é executado no que foi chamado de 'Componente' no Symfony 1.X; Não é o controlador de uma página, mas parte de uma página que precisa de alguma lógica.
O código equivalente no Symfony 1.X é:
sfContext::getInstance()->getRouting()->getCurrentRouteName();
fonte
$view['request']->getParameter('_route');
{% render... %}
chamadas comstandalone=true
. Com o armazenamento em cache (AppCache.php ou verniz com ESI) ativado, isso fará com que as visualizações independentes sejam solicitadas com uma Solicitação HTTP separada (é aqui que a rota_internal
entra em ação) para que seja armazenada em cache independentemente.Com o Symfony 3.3, eu usei esse método e funcionando bem.
Eu tenho 4 rotas como
E apenas uma linha cria uma classe ativa para todas as rotas.
fonte
Para obter a rota atual com base no URL (mais confiável no caso de encaminhamentos):
fonte
Com o Symfony 4.2.7, sou capaz de implementar o seguinte no meu modelo de galho, que exibe o nome da rota personalizada que defini no (s) meu (s) controlador (es).
Em index.html.twig
No meu controlador
O resultado imprime "article_list" na página desejada no meu navegador.
fonte
Para quem precisa de rota atual para o Symfony 3, é isso que eu uso
fonte
se você deseja obter o nome da rota no seu controlador, precisa injetar a solicitação (em vez de sair do contêiner devido ao Symfony UPGRADE e chamar a função get ('_ route').
se você deseja obter o nome da rota em galho do que você precisa
fonte
$request->get()
diretamente porque ele é lento: github.com/symfony/http-foundation/blob/2.8/Request.php#L712