2012-04-27 18 views
8

Burada Symfony2'de n numaralı soruyu bulabilirsiniz.Yaml yolları açıklamasını kullanırken çalışma adı Symfony2'deki yol adı nasıl alınır?

routing.yml dosyasında sağlanan yol adını kullanan pagination bundle ile çalışıyorum. Bakış açımdan, bu yaklaşım esnek değil ve kirli bir kod oluşturuyor, çünkü rotanın adını değiştirirsem, rota adını güncellemek için tüm Twig şablonlarına veya PHP dosyalarına bakmam gerekiyor. Bu, küçük Web uygulamaları için uygun, ancak daha büyük uygulamalar için böyle bir hata sağlayacak ve geliştirici için yüksek bir yüke ihtiyaç duyacaktır.

Yani, yukarıda belirtilen paket tarafından sağlanan x dize değişkenini Pager nesnesine iletmeyi düşünüyordum. x dizgisi denetleyicide başlatılmalı ve routing.yml dosyasında belirtildiği gibi istenen yol adı sağlanmalıdır.

Bir örnek vereyim.

//routing.yml 
AcmeTestBundle_listall: 
pattern: /test/page/{page} 
defaults: { _controller: AcmeTestBundle:List:listall, page: 1 } 
requirements: 
    page: \d+ 

Daha sonra ilgili denetleyicisidir: Daha sonra

//use something.... 
class ListController extends Controller 
{ 

    public function exampleAction($page) 
    { 
    $array = range(1, 100); 
    $adapter = new ArrayAdapter($array); 
    $pager = new Pager($adapter, array('page' => $page, 'limit' => 25)); 

    return array('pager' => $pager); 
    } 
} 

, dal şablonda, $pager yukarıdaki paket

{% if pager.isPaginable %} 
    {{ paginate(pager, 'AcmeTestBundle_listall') }} 
{% endif %} 
{% for item in pager.getResults %} 
    <p>{{ item }}</p> 
{% endfor %} 
bakınız güzergah adını alır yönlendirme dosya aşağıdaki gibidir

'AcmeTestBundle_listall' dize değeri çalışma zamanında denetleyicinin içinde nasıl alacağınıza dair bir fikir var mı?

cevap

30

Geçerli rotadan isteğinize ulaşmak için dalda bulunan app global değişkenini kullanabilirsiniz. here ve hereapp hakkında

{% if pager.isPaginable %} 
    {{ paginate(pager, app.request.get('_route') }} 
{% endif %} 

Daha.

+0

Elbette! Çok teşekkür ederim! Hızlı ve net cevap ... çok takdir! – JeanValjean

+0

Buna ek olarak, rota parametrelerine ihtiyacınız varsa, app.request.get ('_ route_params') işlevini kullanın –

+3

Symfony, rota adını Request'in bir * niteliği * olarak kaydeder, bu nedenle şu şekilde alın: .request.attributes.get ('_ yol') '. Parametreyi sorgu parametresi torbasından almaya çalıştığından 'Request :: get()' yöntemini kullanmaktan kaçının; öznitelikleri çantası yalnızca bir geri dönüş olarak kullanılır. 'Request :: get() 'işlevini kullanan bir kullanıcı, URL’ye'? _route = my_tainted_param' ekleyerek '_route’u geçersiz kılabilir. –

İlgili konular