Jak uzyskać bieżącą trasę w Symfony 2?
Jak uzyskać bieżącą trasę w Symfony 2?
Na przykład, routing.yml
:
somePage:
pattern: /page/
defaults: { _controller: "AcmeBundle:Test:index" }
Jak mogę uzyskać tę wartość somePage
?
12 answers
Z czegoś co jest kontenerem (jak kontroler):
$request = $this->container->get('request');
$routeName = $request->get('_route');
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-17 16:55:06
Z Gałązką: {{ app.request.attributes.get('_route') }}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-06 13:41:08
Myślę, że jest to najprostszy sposób, aby to zrobić:
class MyController extends Controller
{
public function myAction($_route)
{
var_dump($_route);
}
.....
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-08 15:51:59
Symfony 2.0-2.1
Użyj tego:
$router = $this->get("router");
$route = $router->match($this->getRequest()->getPathInfo());
var_dump($route['_route']);
Ten da a nie da ci _internal
.
Aktualizacja dla Symfony 2.2+: {[6] } to nie działa od początku Symfony 2.2+. Otworzyłem błąd i odpowiedź brzmiała "według projektu". Jeśli chcesz uzyskać trasę w pod-akcji, musisz przekazać ją jako argument
{{ render(controller('YourBundle:Menu:menu', { '_locale': app.request.locale, 'route': app.request.attributes.get('_route') } )) }}
I twój kontroler:
public function menuAction($route) { ... }
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-25 14:30:30
Nie ma rozwiązania, które sprawdziłoby się we wszystkich przypadkach użycia. Jeśli użyjesz metody $request - > get('_route') lub jej wariantów, zwróci ona '_internal' dla przypadków, w których miało miejsce przekierowanie.
Jeśli potrzebujesz rozwiązania, które działa nawet z przekierowaniem, musisz użyć nowej usługi RequestStack, która pojawiła się w 2.4, ale spowoduje to złamanie obsługi ESI:
$requestStack = $container->get('request_stack');
$masterRequest = $requestStack->getMasterRequest(); // this is the call that breaks ESI
if ($masterRequest) {
echo $masterRequest->attributes->get('_route');
}
Możesz zrobić z tego rozszerzenie gałązki, jeśli potrzebujesz go w szablonach.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-24 03:51:02
_route
to nie jest droga i nigdy nie było . Według Fabiena, który stworzył Symfony, był on zawsze przeznaczony do debugowania. Jest zawodny, ponieważ nie będzie działał z takimi rzeczami jak przekazywanie i inne bezpośrednie wywołania do kontrolerów, takie jak częściowe renderowanie.
Musisz wprowadzić nazwę trasy jako parametr w kontrolerze, zobacz dokument tutaj
Również nigdy nie używaj $request->get('');
jeśli nie potrzebujesz elastyczności, jest to znacznie wolniejsze niż korzystanie z get na konkretnym worku właściwości, które potrzebujesz (atrybuty, zapytanie lub żądanie) Więc $request->attributes->get('_route');
w tym przypadku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-01 23:06:47
$request->attributes->get('_route');
Nazwę trasy można pobrać z obiektu request z kontrolera.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-01 09:46:54
/ Align = "left" /
_internal
Nazwę trasy otrzymuję z kontrolera z $this->getRequest()->get('_route').
Nawet kod tuxedo25 sugeruje zwraca _internal
Ten kod jest wykonywany w tzw.' komponencie ' w Symfony 1.X; nie Kontroler strony, ale część strony, która wymaga trochę logiki.
Odpowiednik kodu w Symfony 1.X to: sfContext::getInstance()->getRouting()->getCurrentRouteName();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-15 10:28:32
Dla wszystkich, którzy potrzebują bieżącej trasy Symfony 3, to jest to, co używam
<?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
?>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-08 14:40:03
Z Symfony 3.3, użyłem tej metody i działa dobrze.
Mam 4 trasy jak
Admin_category_index, admin_category_detail, admin_category_create, admin_category_update
I tylko jedna linia tworzy klasę aktywną dla wszystkich tras.
<li {% if app.request.get('_route') starts with 'admin_category' %} class="active"{% endif %}>
<a href="{{ path('admin_category_index') }}">Product Categoires</a>
</li>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-04 17:46:13
Aby uzyskać bieżącą trasę na podstawie adresu URL (bardziej wiarygodne w przypadku przekierowań):
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;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-04 05:57:48
Jeśli chcesz uzyskać nazwę trasy w kontrolerze, musisz wprowadzić żądanie (zamiast pobierać z kontenera z powodu Symfony UPGRADE i następnie wywołać get('_route').
public function indexAction(Request $request)
{
$routeName = $request->get('_route');
}
Jeśli chcesz uzyskać nazwę trasy w gałązce, to musisz ją zdobyć jak
{{ app.request.attributes.get('_route') }}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-25 21:12:38