[php] Symfony 2에서 현재 경로를 얻는 방법은 무엇입니까?

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');

컨트롤러 내에서 요청 오브젝트에서 라우트 이름을 얻을 수 있습니다.