2012-05-03 6 views

risposta

12

Intendi i segnaposto con requisiti?

blog: 
    pattern: /blog/{page} 
    defaults: { _controller: AcmeBlogBundle:Blog:index, page: 1 } 
    requirements: 
     page: \d+ 

Qui si dispone di più percorsi definiti da un segnaposto, convalidati da espressioni regolari che vanno alla stessa azione di controllo.

Edit:

Ogni parte del URL può essere un segnaposto.

blog: 
    pattern: /{type}/{page} 
    defaults: { _controller: AcmeBlogBundle:Blog:index, page: 1 } 
    requirements: 
     type: blog|articles 
     page: \d+ 
+0

risposta @svassr aggiornato – ilanco

+0

cosa succede se voglio avere tipo omittable? Ad esempio, come definiresti un percorso per:/posts/sport/2', 'posts/sport',' posts/2'. Quindi la rotta generica è: '/ posts/{category}/{page}', ma - ovviamente - non funziona con solo valori predefiniti. C'è un modo per dire a symfony come riconoscere se il secondo parametro è string/int? –

24

Quando si utilizzano le annotazioni, è possibile definire più percorsi. Come quella:

/** 
* @Route ("item1") 
* @Route ("item/2") 
* @Method("GET") 
*/ 
public function itemAction() { 

} 

sto usando la versione 2.0.9

+2

Questo è davvero interessante, mi piace l'idea di definire i percorsi correlati poco prima di _Action_, ma preferirei mantenere tutto in un solo _routing.yml_ invece di diffondere le mie regole di routing in tutti i miei controller – svassr

+5

Come probabilmente hai il app/console aperta, non dimenticare il router: comando di debug per vedere tutti i tuoi percorsi. Se usi le annotazioni, per impostazione predefinita riceverai nomi ragionevoli per i tuoi percorsi, quindi è abbastanza facile trovare il controller. – cvaldemar

+1

Non è possibile mantenere tutte le rotte in un file quando si utilizzano più pacchetti (quando si includono rotte come risorsa nell'app principale 'routing.yml'), quindi questo non è un argomento per il routing. Le annotazioni sono facili da usare, facili da debugare ('router: debug') e configurabili (è possibile impostare il proprio nome ad esempio:' @Route ("/", name = "homepage") '). – Wirone

4

NOTE esempio per i percorsi con i parametri:

/** 
* @Route("/shops/{page}", name="shops") 
* @Route("/shops/town/{town}/{page}", name="shops_town") 
* @Route("/shops/department/{department}/{page}", name="shops_department") 
*/ 
public function shopsAction(Town $town = null, Department $department = null, $page = 1) 
{ ... } 

Poi generazione del percorso in ramoscello in questo modo:

{{ path('shops_town') }} 

o

{{ path('shops_town', {'town': town.id}) }} 

o

{{ path('shops_department', {'department': department.id}) }} 
Problemi correlati