[symfony] 잔가지 템플릿으로 현재 URL을 얻으시겠습니까?

전체 URL이 아닌 Twig 템플릿에서 현재 경로를 가져 오는 코드를 둘러 보았습니다. 즉 http://www.sitename.com/page, 원하지 않습니다 /page.



답변

{{ path(app.request.attributes.get('_route'),
     app.request.attributes.get('_route_params')) }}

뷰 변수로 읽으려면 다음을 수행하십시오.

{% set currentPath = path(app.request.attributes.get('_route'),
                       app.request.attributes.get('_route_params')) %}

app글로벌 변수보기에 유용 등의 바로 가기, 모든 종류의 포함 app.sessionapp.security.token.user당신이 컨트롤러에서 사용할 수있는 서비스를 참조.


답변

가져 오기 현재 URL을 : {{ app.request.uri }}심포니 2.3, 3, 4, 5


가져 오기 에만 경로 : {{ app.request.pathinfo }}(매개 변수없이)


가져 오기 요청 URI를 : {{ app.request.requesturi }}(매개 변수)


답변

symfony 2.1에서는 다음을 사용할 수 있습니다.

{{ path(app.request.attributes.get('_route'),
        app.request.attributes.get('_route_params')) }}

symfony 2.0에서 한 가지 해결책은이를위한 작은 가지 확장을 작성하는 것입니다.

public function getFunctions()
{
    return array(
        'my_router_params' => new \Twig_Function_Method($this, 'routerParams'),
    );
}

/**
 * Emulating the symfony 2.1.x $request->attributes->get('_route_params') feature.
 * Code based on PagerfantaBundle's twig extension.
 */
public function routerParams()
{
    $router = $this->container->get('router');
    $request = $this->container->get('request');

    $routeName = $request->attributes->get('_route');
    $routeParams = $request->query->all();
    foreach ($router->getRouteCollection()->get($routeName)->compile()->getVariables() as $variable) {
        $routeParams[$variable] = $request->attributes->get($variable);
    }

    return $routeParams;
}

그리고 이렇게 사용하십시오

{{ path(app.request.attributes.get('_route'), my_router_params()|merge({'additional': 'value'}) }}

호출기에서와 같이 링크에 추가 매개 변수를 추가하거나 매개 변수 중 하나를 변경하지 않는 한이 모든 것이 필요하지 않습니다.


답변

다음과 같이 Twig에서 현재 URL을 얻을 수 있습니다.

{{ app.request.schemeAndHttpHost ~ app.request.requestUri }}


답변

구성된 경로의 일부 가 아닌 URL에 추가 쿼리 매개 변수가있는 경우 허용 된 답변에 현재 URL (경로)에 포함되지 않습니다.

추가 매개 변수를 원하는 이유는 무엇입니까?

예를 들어 키워드로 필터링 할 수있는 레코드가있는 목록 페이지가 있고 페이지에 페이지가 매겨져 있으면 “keyword”및 “page”에 대한 쿼리 변수가 경로에없는 것 같습니다. 그러나 페이징을위한 앞으로 및 뒤로 단추에는 전체 현재 URL이 필요합니다 (다음 페이지가 여전히 필터링되도록 키워드가 포함되어 있음). 그리고 페이지 변수를 수정해야합니다.

추가 쿼리 매개 변수를 병합하는 방법

따라서 현재 경로를 가져 와서 추가 변수를 병합 할 수 있습니다 (추가 변수 중 하나 이상을 수정 한 후). 자신의 변수를에 app.request.query.all병합 한 다음 해당 배열을에 병합합니다 app.request.attributes.get('_route_params'). 이 path()방법을 사용하려면 경로의 모든 필수 매개 변수를 제공해야하므로를 포함해야합니다 _route_params.

{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge(app.request.query.all|merge({'page': 2 }))) }}

정말 추악하지만 페이지 매김을 개발하는 경우 각 개별 링크에서 페이지 변수를 수정해야하므로 매번 전체를 포함해야합니다. 아마도 다른 사람들이 더 나은 솔루션을 가지고있을 것입니다.


답변

Silex 2를 사용중인 경우 더 이상 Request 객체에 액세스 할 수 없습니다.

이 방법으로 현재 요청 속성에 액세스 할 수 있습니다.

app.request_stack.currentrequest.attributes.get('_route')

그리고 전체 현재 URL을 생성하려면 :
path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))


답변