Symfony 2 에서 현재 경로를 어떻게 얻 습니까?
예를 들면 다음과 routing.yml
같습니다.
somePage:
pattern: /page/
defaults: { _controller: "AcmeBundle:Test:index" }
이 somePage
값을 어떻게 얻을 수 있습니까?
답변
컨트롤러와 같은 ContainerAware에서 :
$request = $this->container->get('request');
$routeName = $request->get('_route');
답변
나뭇 가지로 : {{ app.request.attributes.get('_route') }}
답변
이것이 가장 쉬운 방법이라고 생각합니다.
class MyController extends Controller
{
public function myAction($_route)
{
var_dump($_route);
}
.....
답변
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) { ... }
답변
모든 사용 사례에 적합한 솔루션은 없습니다. $ 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');
.
답변
$request->attributes->get('_route');
컨트롤러 내에서 요청 오브젝트에서 라우트 이름을 얻을 수 있습니다.