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


169

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


11
답변 # 2에 링크 된 질문에서 제공하지 않는 필요한 정보 (요청 매개 변수에 대한 정보)가 포함되어 있으므로 이는 정확히 중복되지 않습니다. 답변 # 2를 링크 된 질문에 병합해야합니다.
Victor Sergienko 2016 년

1
app.request.requestUri를 사용해보십시오.
Kristóf Dombi

7
전혀 속지 않았습니다. 재개 투표. 응답 할 수 없어서 답변으로 댓글을 올리는 중 ... {{ app.request.getBaseUrl ~ app.request.getPathInfo }}( getBaseUrl비트는 선택 사항이며 도메인의 루트에 설치되지 않은 경우에만 필요)
mpen

답변:


250
{{ 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당신이 컨트롤러에서 사용할 수있는 서비스를 참조.


9
불행히도 필수 매개 변수가있는 경로가 있으면 작동하지 않습니다.
Martin Schuhfuß

Symfony없이 Twig를 사용하는 경우 다음과 같이 할 수 있습니다. $ twig-> addGlobal ( "CurrentUrl", $ _SERVER [ "REQUEST_URI"]);
GateKiller

1
경로에 필수 매개 변수가있는 경우 아래 답변을 참조하십시오 .
Sam

@GateKiller 이로 인해 기능 테스트가 실패했습니다.Uncaught PHP Exception PHPUnit_Framework_Error_Notice: "Undefined index: REQUEST_URI"
Robin

매우 유용한 놀라운 답변에 감사드립니다!
Vahe Shadunts 2016 년

199

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


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


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


1
이것은 나를 위해 일한 유일한 것입니다. 다른 모든 것들은 경로의 일부가 아니거나 Twig가 아닌 컨트롤러에 의존하는 쿼리 매개 변수를 빠뜨 렸습니다.
Craig

13
경로를 얻으려면{{ app.request.pathinfo }}/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
Michael

2
이것이 정답이어야합니다. 짧고 매끄 럽습니다.
Fabian Picone

2
uri매개 변수가있는 URL을 가져옵니다. pathinfo와 경로 가져 NO의 매개 변수를. requestUri경로 WITH 매개 변수를 가져옵니다 . requestUri이 답변 IMO에 추가해야합니다. 도메인이 거의 필요하지 않으며 매개 변수를 거의 제거하지 않을 것입니다.
rybo111 2016 년

115

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

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


11
Twig에서 현재 링크를 생성하고 언어 전환을위한 로케일을 변경하려는 경우 Symfony 2.1에서 다음과 같이 수행 할 수 있습니다. {{path (app.request.attributes.get ( '_ route'), app.request.attributes 갔지 ( '_ route_params') | 병합 ({ '_ 로케일': 'JA는'})는 Bártfai 타마스에 의해 나뭇 가지 확장 기능을 사용하는 경우)}} 그것은이 작동
Naytzyrhc

2.0 구현의 경우 컨테이너가 없다는 오류가 발생합니다. 그래서 PagerfantaBundle에서와 같이 변수를 추가했지만 ContainerInterface를 구현해야한다고 말합니다.
Squazic

$ container 매개 변수가있는이 확장의 생성자를 작성해야합니다. 그런 다음 DIC 구성에서 컨테이너를 확장의 매개 변수로 선언해야합니다. 여기 TwigBundle처럼
Bártfai 타마스

12
쿼리 문자열에 추가 매개 변수가 있으면 _route_parameters가 작동하지 않습니다. 대신 app.request.query.all을 사용할 수 있습니다.
wdev

34

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

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

20

구성된 경로의 일부 가 아닌 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 }))) }}

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


2
아마 {{ path(app.request.attributes.get('_route'), app.request.query.all|merge(app.request.attributes.get('_route_params'))) }}
FDisk

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


다음과 같이 Twig / Silex 2에서 현재 URL을 얻을 수 있습니다 global.request.attributes.get('_route'). 나뭇 가지 다리 가 필요합니다.
dsoms 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.