답변:
컨트롤러와 같은 ContainerAware에서 :
$request = $this->container->get('request');
$routeName = $request->get('_route');
나뭇 가지로 : {{ app.request.attributes.get('_route') }}
<body class="{{ app.request.get('_route') | replace({'_' : '-'}) }}">
페이지 특정 CSS를 적용하는 데 사용 중 입니다 :)
이것이 가장 쉬운 방법이라고 생각합니다.
class MyController extends Controller
{
public function myAction($_route)
{
var_dump($_route);
}
.....
{% render "SomeBundle:SomeController:someAction" %}
'_internal'값을 다시 얻는 곳 과 같은 하위 요청에서는 작동하지 않습니다 .
Symfony 2.0-2.1 이것을
사용하십시오 :
$router = $this->get("router");
$route = $router->match($this->getRequest()->getPathInfo());
var_dump($route['_route']);
그 사람은 당신을 제공 하지 않습니다_internal
.
Symfony 2.2 이상 업데이트 : Symfony 2.2 이상부터 작동하지 않습니다. 나는 버그를 열었고 그 대답은 "디자인에 의한 것"이었다. 하위 작업에서 경로를 얻으려면 인수로 경로를 전달해야합니다.
{{ render(controller('YourBundle:Menu:menu', { '_locale': app.request.locale, 'route': app.request.attributes.get('_route') } )) }}
그리고 당신의 컨트롤러 :
public function menuAction($route) { ... }
$route['_route']
문제가있는 것처럼 보이지만 심포니 개발자가 이야기하지 않을 수도 있습니다. 에 대해 언급하지 않습니다 요리 책 _route
의 $router->match()
출력 ..
$router->match()
것 같다 "매개 변수의 @return 배열 배열"라는 매우 내부. 나는 그것에 의존하고 싶지 않지만 지금은 하위 요청을 처리 할 때 유일하게 가능한 솔루션 인 것 같습니다.
모든 사용 사례에 적합한 솔루션은 없습니다. $ request-> get ( '_ route') 메소드 또는 그 변형 을 사용하는 경우 전달이 발생한 경우 '_internal' 을 리턴 합니다.
전달에서도 작동하는 솔루션이 필요한 경우 2.4에 도착한 새로운 RequestStack 서비스를 사용해야하지만 ESI 지원 이 중단됩니다 .
$requestStack = $container->get('request_stack');
$masterRequest = $requestStack->getMasterRequest(); // this is the call that breaks ESI
if ($masterRequest) {
echo $masterRequest->attributes->get('_route');
}
템플릿에서 필요한 경우 나뭇 가지 확장을 만들 수 있습니다.
_route
가는 길이 아니며 결코 없었다 . Symfony를 만든 Fabien에 따르면 항상 디버깅 목적으로 사용 되었습니다. 전달 및 부분 렌더링과 같은 컨트롤러에 대한 다른 직접 호출과 같은 작업에서는 작동하지 않으므로 신뢰할 수 없습니다.
컨트롤러에 경로 이름을 매개 변수로 주입해야합니다. 여기에서 문서를 참조하십시오
또한 $request->get('');
유연성이 필요하지 않은 경우이 속성에서 필요한 특정 속성 백 (속성, 쿼리 또는 요청)을 사용하는 것보다 속도가 느립니다 $request->attributes->get('_route');
.
내가 얻는 전부는
_internal
$this->getRequest()->get('_route').
심지어 코드 tuxedo25 제안 된 반환 으로 컨트롤러 내부에서 경로 이름을 얻습니다._internal
이 코드는 Symfony 1.X의 'Component'에서 실행되었습니다. 페이지의 컨트롤러가 아니라 일부 로직이 필요한 페이지의 일부입니다.
Symfony 1.X의 해당 코드는 다음과 같습니다. sfContext::getInstance()->getRouting()->getCurrentRouteName();
$view['request']->getParameter('_route');
{% render... %}
와 통화를 사용하고 있기 때문 입니다 standalone=true
. 캐싱 (AppCache.php 또는 ESI가있는 바니시)을 활성화하면 독립 뷰를 별도의 HTTP 요청 (라우트가 실행되는 곳 _internal
)으로 요청하여 독립적으로 캐시 할 수 있습니다.
Symfony 3.3에서는이 방법을 사용하여 정상적으로 작동했습니다.
나는 같은 4 경로가
admin_category_index, admin_category_detail, admin_category_create, admin_category_update
그리고 한 줄만 모든 노선에 대해 활발한 수업을합니다.
<li {% if app.request.get('_route') starts with 'admin_category' %} class="active"{% endif %}>
<a href="{{ path('admin_category_index') }}">Product Categoires</a>
</li>
URL을 기반으로 현재 경로를 가져 오려면 (전달의 경우 더 안정적 임) :
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;
}
Symfony 4.2.7을 사용하면 컨트롤러에서 정의한 사용자 지정 경로 이름을 표시하는 나뭇 가지 템플릿에서 다음을 구현할 수 있습니다.
index.html.twig에서
<div class="col">
{% set current_path = app.request.get('_route') %}
{{ current_path }}
</div>
내 컨트롤러에서
...
class ArticleController extends AbstractController {
/**
* @Route("/", name="article_list")
* @Method({"GET"})
*/
public function index() {
...
}
...
}
결과는 브라우저에서 원하는 페이지에 "article_list"를 인쇄합니다.
Symfony 3에 대한 현재 경로가 필요한 사람에게는 이것이 내가 사용하는 것입니다
<?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
$name = $request->get('_route'); // This will return the name.
?>
컨트롤러에서 경로 이름을 얻으려면 Symfony UPGRADE 로 인해 컨테이너에서 가져 오는 대신 get ( '_ route')를 호출하는 대신 요청을 삽입해야 합니다.
public function indexAction(Request $request)
{
$routeName = $request->get('_route');
}
당신은 당신이 그것을 얻는 것보다 나뭇 가지에 경로 이름을 얻으려면
{{ app.request.attributes.get('_route') }}
$request->get()
가 느린 때문에 직접 : github.com/symfony/http-foundation/blob/2.8/Request.php#L712