전체 URL이 아닌 Twig 템플릿에서 현재 경로를 가져 오는 코드를 둘러 보았습니다. 즉 http://www.sitename.com/page
, 원하지 않습니다 /page
.
{{ app.request.getBaseUrl ~ app.request.getPathInfo }}
( getBaseUrl
비트는 선택 사항이며 도메인의 루트에 설치되지 않은 경우에만 필요)
전체 URL이 아닌 Twig 템플릿에서 현재 경로를 가져 오는 코드를 둘러 보았습니다. 즉 http://www.sitename.com/page
, 원하지 않습니다 /page
.
{{ app.request.getBaseUrl ~ app.request.getPathInfo }}
( getBaseUrl
비트는 선택 사항이며 도메인의 루트에 설치되지 않은 경우에만 필요)
답변:
{{ 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.session
과 app.security.token.user
당신이 컨트롤러에서 사용할 수있는 서비스를 참조.
Uncaught PHP Exception PHPUnit_Framework_Error_Notice: "Undefined index: REQUEST_URI"
가져 오기 현재 URL을 : {{ app.request.uri }}
에 심포니 2.3, 3, 4, 5
가져 오기 에만 경로 : {{ app.request.pathinfo }}
(매개 변수없이)
가져 오기 요청 URI를 : {{ app.request.requesturi }}
(매개 변수)
{{ app.request.pathinfo }}
/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
uri
매개 변수가있는 URL을 가져옵니다. pathinfo
와 경로 가져 NO의 매개 변수를. requestUri
경로 WITH 매개 변수를 가져옵니다 . requestUri
이 답변 IMO에 추가해야합니다. 도메인이 거의 필요하지 않으며 매개 변수를 거의 제거하지 않을 것입니다.
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'}) }}
호출기에서와 같이 링크에 추가 매개 변수를 추가하거나 매개 변수 중 하나를 변경하지 않는 한이 모든 것이 필요하지 않습니다.
구성된 경로의 일부 가 아닌 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 }))) }}
정말 추악하지만 페이지 매김을 개발하는 경우 각 개별 링크에서 페이지 변수를 수정해야하므로 매번 전체를 포함해야합니다. 아마도 다른 사람들이 더 나은 솔루션을 가지고있을 것입니다.
{{ path(app.request.attributes.get('_route'), app.request.query.all|merge(app.request.attributes.get('_route_params'))) }}
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'))
global.request.attributes.get('_route')
. 나뭇 가지 다리 가 필요합니다.