2013-06-12 16 views
5

için dört URL'ler tr isteğe bağlı parametre:Symfony2'deki Yönlendirme: Ben bir yol olacak şekilde dört URL'ler mümkün kılmak istiyoruz Benim Symfony2 uygulamasında bir rota

  1. a-lot-of-the other-malzeme/rapor/- 20 (negatif sayı)
  2. a-lot-of-the other-malzeme/rapor/40 (pozitif sayı)
  3. a-lot-of-the other-malzeme/rapor/(hayır sayı)
  4. a-lot- of-diğer-şeyler/(/ hayır numarası ve hayır) rapor

Benim rota anda şöyle görünür:

report: 
    pattern: /report/{days} 
    defaults: { _controller: "AppReportBundle:Report:dayReport", days = null } 

eylem tanımlanır:

Bu Şu anda url 1 ve 2 çalışıyor ama url 3 ve 4 durumunda, bir hata alıyorum

Rota bulunamadı

"Günler" parametresini nasıl isteğe bağlı yapabilirim?
Ve parametre sağlanmadıysa, /'un atlanmasına nasıl izin verebilirim?

+0

O var çok ilginç. Çünkü 4. rotayı çalışmalı. Genellikle isteğe bağlı parametreleri kullanırım ancak Ek Açıklama Yolu tanımını kullanırım. İşlev imzasında varsayılan değeri tanımlarım varsa, varsayılanları ek açıklamada tanımlamamalıydım. Belki varsayılan bildirimlerden birini (örneğin, routing.yml) atlamalısınız veya null yerine sayısal (veya string/bool) değerini kullanmaya çalışmalısınız. Belki yardımcı olacaktır. –

+3

Rotanızın yapılandırması şu şekilde olmalıdır: 'default: {_controller:" AppReportBundle: Rapor: dayReport ", günler: null}' – jkucharovic

cevap

14

İşte gereksinimleri yana

report: 
    pattern: /report/{days} 
    defaults: { _controller: "AppReportBundle:Report:dayReport", days: null } 
    requirements: 
     days: -?\d+ 

report_reroute: 
    pattern: /report/ 
    defaults: 
     _controller: FrameworkBundle:Redirect:redirect 
     route: report 
     permanent: true 

bu

routing.yml Eğer negatif bir sayı var sağlayan bir regexp'in deseni yapmak için bir yoldur.

yeniden yönlendirme bölümünde Sen bu okuyabilirsiniz rota /report//report
üzerine yönlendirmek için zorlar: Cookbok Entry - böyle bir davranışa sahip Elnur's Answer

, sahip olacaktır:

Route  | Action     | Parameters 
------------|------------------------|------------- 
/report  | dayReportAction  | $days = null 
/report/ | 301 to /report   | 
/report/60 | dayReportAction  | $days = 60 
/report/-4 | dayReportAction  | $days = -4 
/report/foo | 404     | 
+0

Siparişte, örneğin önceki rotaları kullanarak, rotadaki diğer kısımların üstesinden gelmek mümkün mü? '/ report /' seçeneğinin isteğe bağlı olabileceği bir çok şeyden başka bir şey/rapor/40 ', bu yüzden sonlandırma şöyle olurdu:' a-lot-of-other-stuff/40 ', varsayılan davranışlarım olduğu için yollarıma dahil mi Bunu nasıl başarabilirdik? –

+0

@ Félix Aynı kontrolör eylemine yeni bir rota oluşturmak istersiniz.Tam bir cevapla ilgileniyorsanız, yeni bir soru oluşturmanız gerekir. – Touki

+0

Burada yeni bir soru oluşturdum, lütfen ziyaret edin: http://stackoverflow.com/questions/21766700/intermediate-route-optional-parameters-in-symfony-2 –