2011-10-09 7 views
13

mio percorso (lumaca contiene i trattini!):Symfony2 come consentire l'espressione di slug con trattini nei regex?

region: 
    pattern: /regione/{slug}-{id} 
    defaults: { _controller: SWAItaliaInCifreBundle:Default:region } 

In template Twig:

{% for r in regions %} 
    <a href='{{ path('region', { 'slug':r.slug, 'id':r.id }) }}'>{{ r.name }}</a> 
{% endfor %} 

Ricevo un errore di sulla corrispondenza di espressioni regolari. Domanda: perché Symfony2 non consente i trattini nell'URL? Come posso specificare che la mia rotta contiene trattini (ed è perfettamente a posto)?

Un'eccezione è stata gettata durante il rendering di un modello ("Parametro "slug" per strada "regione" deve corrispondere "[^/-] +" (" Valle-d-Aosta-Vallée -d-aoste "dato).")

risposta

16

Le barre sono di default vietate. È possibile abilitarli modificando i requisiti predefiniti. Nel tuo caso sarebbe anche bene dare i requisiti per l'ID in quanto è separato da dash.

Vedere l'esempio di seguito.

region: 
    pattern: /regione/{slug}-{id} 
    defaults: 
     _controller: SWAItaliaInCifreBundle:Default:region 
    requirements: 
     slug: "[a-zA-Z1-9\-_\/]+" 
     id: "\d+" 
+0

per consentire una barra finale basta aggiungere un '/' alla fine del modello. per esempio. schema:/regione/{slug} - {id}/- quindi nessuna regex per questo è necessaria nei requisiti – Michael

+0

la risposta sotto è quella giusta. questa configurazione ha sia la struttura errata che la notazione – coviex

+0

@coviex che era una vecchia risposta/notazione. Aggiornato la mia risposta. –

5

Questo regex funziona per me. ({Id} requisito suggerito da Michael)

region: 
    pattern: /regione/{slug}-{id} 
    defaults: { _controller: SWAItaliaInCifreBundle:Default:region } 
    requirements: 
    slug: "[a-zA-Z0-9-_/]+" 
    id: "\d+" 
+1

per completarlo, è possibile aggiungere ai requisiti: id: \ d + – Michael

1

se si tenta questo getterà un errore come questo:

An exception has been thrown during the rendering of a template ("Parameter "slug" for route "routing_whatever" must match "[a-zA-Z0-9-_/]+" ("Topics/Virtualization Security" given).") in ... 

come si vede nella http://symfony.com/doc/current/cookbook/routing/slash_in_parameter.html è necessario utilizzare:

slug: ". +"