Bir Twig şablonunda (ve tam URL değil) geçerli yolu almak için kod aradım, yani istemiyorum http://www.sitename.com/page
, sadece ihtiyacım var /page
.
{{ app.request.getBaseUrl ~ app.request.getPathInfo }}
getBaseUrl
Bir Twig şablonunda (ve tam URL değil) geçerli yolu almak için kod aradım, yani istemiyorum http://www.sitename.com/page
, sadece ihtiyacım var /page
.
{{ app.request.getBaseUrl ~ app.request.getPathInfo }}
getBaseUrl
Yanıtlar:
{{ path(app.request.attributes.get('_route'),
app.request.attributes.get('_route_params')) }}
Bir görünüm değişkeninde okumak istiyorsanız:
{% set currentPath = path(app.request.attributes.get('_route'),
app.request.attributes.get('_route_params')) %}
Genel app
görünüm değişkeni, bir denetleyicide kullanabileceğiniz hizmetlere başvuran app.session
ve gibi her türlü yararlı kısayolu içerir app.security.token.user
.
Uncaught PHP Exception PHPUnit_Framework_Error_Notice: "Undefined index: REQUEST_URI"
Get geçerli url : {{ app.request.uri }}
in Symfony'de 2.3, 3, 4, 5
Yalnızca yolu al : {{ app.request.pathinfo }}
(parametresiz)
İstek alın uri : {{ app.request.requesturi }}
(parametrelerle)
{{ app.request.pathinfo }}
yöntemlerin bir listesini deneyin veya görün/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
uri
URL'yi parametrelerle alır. NO parametresi pathinfo
ile yolu alır . parametresi İLE yolu alır . bu cevaba IMO eklenmelidir. Etki alanına nadiren ihtiyacınız olacak ve parametreleri nadiren kaldırmak isteyeceksiniz. requestUri
requestUri
Symfony 2.1'de bunu kullanabilirsiniz:
{{ path(app.request.attributes.get('_route'),
app.request.attributes.get('_route_params')) }}
Symfony 2.0'da bir çözüm bunun için bir dal uzantısı yazmaktır
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;
}
Ve böyle kullan
{{ path(app.request.attributes.get('_route'), my_router_params()|merge({'additional': 'value'}) }}
Bir çağrı cihazında olduğu gibi bağlantılarınıza ek parametreler eklemek istemiyorsanız veya parametrelerden birini değiştirmek istemiyorsanız, tüm bunlara ihtiyacınız olmayacaktır.
Mevcut URL'yi Twig'de şu şekilde alabilirsiniz:
{{ app.request.schemeAndHttpHost ~ app.request.requestUri }}
URL'nizde yapılandırılmış rotanın bir parçası olmayan ek sorgu parametreleriniz varsa , kabul edilen yanıtın bunları geçerli URL'ye (yola) dahil etmeyeceğine dikkat edilmelidir .
Örneğin, anahtar kelimeye göre filtrelenebilecek kayıtların bulunduğu bir liste sayfanız varsa ve sayfa sayfa numaralandırması varsa, büyük olasılıkla "anahtar kelime" ve "sayfa" için sorgu değişkenleri rotanızda olmayacaktır. Ancak, sayfalama için ileri ve geri düğmelerinizde, tam olarak geçerli URL'ye ihtiyacınız vardır (bir sonraki sayfanın yine de filtrelenmesi için anahtar kelimeleri içerir). Ve sayfa değişkenini değiştirmeniz gerekir.
Böylece geçerli rotayı alabilir ve ekstra değişkenleri birleştirebilirsiniz (bu ekstra değişkenlerden birini veya daha fazlasını değiştirdikten sonra). Kendi değişkenlerinizde ile app.request.query.all
birleştirdiğinizi ve ardından bu diziyi ile birleştirdiğinizi unutmayın app.request.attributes.get('_route_params')
. path()
Yöntem dahil etmek ihtiyacımız var rota, tüm gerekli parametreleri sağlamak gerektirir _route_params
.
{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge(app.request.query.all|merge({'page': 2 }))) }}
Bu gerçekten çirkin, ancak sayfalandırma geliştiriyorsanız, her ayrı bağlantıdaki sayfa değişkenini değiştirmeniz gerekir, bu nedenle her seferinde her şeyi eklemeniz gerekir. Belki de başkalarının daha iyi bir çözümü vardır.
{{ path(app.request.attributes.get('_route'), app.request.query.all|merge(app.request.attributes.get('_route_params'))) }}
Silex 2 kullanıyorsanız, Request nesnesine artık erişemezsiniz.
Mevcut istek özelliklerine bu şekilde erişebilirsiniz.
app.request_stack.currentrequest.attributes.get('_route')
Mevcut URL'nin tamamını oluşturmak için:
path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))
global.request.attributes.get('_route')
. Dal köprüsü gereklidir.