2011-10-09 14 views
13

Mi ruta (babosa contiene guiones!):Symfony2 cómo permitir slug con guiones en rutas regex?

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

En la plantilla de la ramita:

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

estoy recibiendo un error sobre expresiones regulares. Pregunta: ¿por qué Symfony2 no permite guiones en la url? ¿Cómo puedo especificar que mi ruta contiene guiones (y está perfectamente bien)?

Una excepción ha sido lanzado durante la prestación de una plantilla (babosa "Parameter "" para ruta "región" debe coincidir "[^/-]? +" (" valle-d-aosta-Vallée -d-aoste "given).")

Respuesta

16

Las barras están prohibidas por defecto. Puede habilitarlos cambiando los requisitos predeterminados. En su caso, también sería bueno dar los requisitos para la identificación, ya que está separada con guión.

Vea el ejemplo a continuación.

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

para permitir una barra inclinada simplemente agregue un '/' al final de su patrón. p.ej. patrón:/regione/{slug} - {id}/- entonces no se necesita una expresión regular para esto en los requisitos – Michael

+0

, la respuesta a continuación es la correcta. esta configuración tiene una estructura y notación incorrecta – coviex

+0

@coviex que era una respuesta/notación antigua. Actualizado mi respuesta. –

5

Este regex funciona para mí. ({Id} requisito sugerido por Michael)

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

para completarlo, puede agregar requisitos: id: \ d + – Michael

1

si usted intenta esto arrojará un error como este:

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 ... 

como se ve en http://symfony.com/doc/current/cookbook/routing/slash_in_parameter.html debe utilizar:

babosa: ". +"

Cuestiones relacionadas