Jak uzyskać aktualną trasę w Symfony 2?
Na przykład routing.yml
:
somePage:
pattern: /page/
defaults: { _controller: "AcmeBundle:Test:index" }
Jak mogę uzyskać tę somePage
wartość?
php
symfony
routing
symfony-routing
IlyaDoroshin
źródło
źródło
Z gałązką:
{{ app.request.attributes.get('_route') }}
źródło
<body class="{{ app.request.get('_route') | replace({'_' : '-'}) }}">
do stosowania css specyficznych dla strony :)Myślę, że to najłatwiejszy sposób:
źródło
{% render "SomeBundle:SomeController:someAction" %}
, gdzie ponownie otrzymasz wartość „_internal”.Symfony 2.0-2.1
Użyj tego:
Tego ci nie da
_internal
.Aktualizacja dla Symfony 2.2+: To nie działa, uruchamiając Symfony 2.2+. Otworzyłem błąd i odpowiedź brzmiała „zgodnie z projektem”. Jeśli chcesz uzyskać trasę w podakcji, musisz podać ją jako argument
A twój kontroler:
źródło
$route['_route']
wydaje się problematyczny, ale może nie być gadaniem deweloperów symfony. The Cookbook nie wspominając o_route
od$router->match()
wyjścia ..$router->match()
mówi „@return array Tablica parametrów”, co wydaje się bardzo wewnętrzne. Nie chcę na tym polegać, ale w tej chwili wydaje się, że jest to jedyne realne rozwiązanie w przypadku pod-żądań.Nie ma rozwiązania, które działałoby we wszystkich przypadkach użycia. Jeśli użyjesz metody $ request-> get ('_ route') lub jej wariantów, zwróci ona „_internal” w przypadkach, w których miało miejsce przekazywanie.
Jeśli potrzebujesz rozwiązania, które działa nawet przy przesyłaniu dalej, musisz skorzystać z nowej usługi RequestStack, która została dostarczona w wersji 2.4, ale spowoduje to przerwanie obsługi ESI :
Możesz zrobić z niego rozszerzenie gałązki, jeśli potrzebujesz go w szablonach.
źródło
_route
to nie jest droga i nigdy nie było . Zawsze był przeznaczony do debugowania według Fabiena, który stworzył Symfony. Jest zawodny, ponieważ nie będzie działał z takimi rzeczami, jak przekazywanie i inne bezpośrednie połączenia do kontrolerów, takie jak częściowe renderowanie.Musisz wprowadzić nazwę trasy jako parametr w kontrolerze, zobacz dokument tutaj
Ponadto, nigdy nie używaj,
$request->get('');
jeśli nie potrzebujesz elastyczności, ponieważ jest ona znacznie wolniejsza niż korzystanie z konkretnej torby właściwości, której potrzebujesz (atrybuty, zapytanie lub żądanie), więc$request->attributes->get('_route');
w tym przypadku.źródło
Nazwę trasy można uzyskać z obiektu żądania z poziomu kontrolera.
źródło
Wszystko, co z tego czerpię, to
_internal
Dostaję nazwę trasy z wnętrza kontrolera,
$this->getRequest()->get('_route').
nawet kod tuxedo25 sugeruje zwroty_internal
Ten kod jest wykonywany w tak zwanym „komponencie” w Symfony 1.X; Nie kontroler strony, ale część strony, która wymaga pewnej logiki.
Odpowiednikiem kodu w Symfony 1.X jest:
sfContext::getInstance()->getRouting()->getCurrentRouteName();
źródło
$view['request']->getParameter('_route');
{% render... %}
połączeń zstandalone=true
. Przy włączonym buforowaniu (AppCache.php lub lakier z ESI) spowoduje to żądanie niezależnych widoków z oddzielnym żądaniem HTTP (tutaj rozpoczyna się trasa_internal
), aby ro można było niezależnie buforować.W Symfony 3.3 zastosowałem tę metodę i działałem dobrze.
Mam 4 trasy jak
I tylko jedna linia tworzy aktywną klasę dla wszystkich tras.
źródło
Aby uzyskać bieżącą trasę na podstawie adresu URL (bardziej niezawodne w przypadku przekazywania dalej):
źródło
W Symfony 4.2.7 jestem w stanie zaimplementować następujące elementy w moim szablonie gałązki, który wyświetla niestandardową nazwę trasy zdefiniowaną w moich kontrolerach.
W index.html.twig
W moim kontrolerze
Wynik wypisuje „article_list” na wybranej stronie w mojej przeglądarce.
źródło
Dla każdego, kto potrzebuje aktualnej trasy do Symfony 3, tego właśnie używam
źródło
jeśli chcesz uzyskać nazwę trasy w swoim kontrolerze, musisz wstrzyknąć żądanie (zamiast pobierać z kontenera ze względu na Symfony UPGRADE i niż wywołać get ('_ route').
jeśli chcesz uzyskać nazwę trasy w gałązce, niż musisz ją uzyskać
źródło
$request->get()
bezpośrednio, ponieważ jest wolny: github.com/symfony/http-foundation/blob/2.8/Request.php#L712