2011-10-09 21 views
13

tuyến đường của tôi (sên chứa dấu gạch ngang!):Symfony2 làm thế nào để cho phép slug với dấu gạch ngang trong các tuyến đường regex?

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

Trong cành mẫu:

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

Tôi nhận được một lỗi về kết hợp biểu thức chính quy. Câu hỏi: tại sao Symfony2 không cho phép dấu gạch ngang trong url? Làm thế nào tôi có thể xác định rằng tuyến đường của tôi chứa dấu gạch ngang (và nó hoàn toàn tốt)?

Một ngoại lệ đã được ném trong việc vẽ của một mẫu ("Tham số "sên" cho tuyến đường "khu vực" phải phù hợp "[^/-]? +" (" valle-d-aosta-Vallee -d-aoste "đã cho).")

Trả lời

16

Dấu gạch ngang bị cấm theo mặc định. Bạn có thể bật chúng bằng cách thay đổi các yêu cầu mặc định. Trong trường hợp của bạn nó cũng sẽ được tốt để cung cấp cho các yêu cầu cho id như nó được tách ra với dấu gạch ngang.

Xem ví dụ bên dưới.

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

để cho phép dấu gạch chéo chỉ thêm dấu '/' ở cuối mẫu của bạn. ví dụ. pattern:/regione/{slug} - {id}/- sau đó không có regex cho điều này là cần thiết trong các yêu cầu – Michael

+0

câu trả lời dưới đây là đúng. cấu hình này có cấu trúc sai và ký hiệu là – coviex

+0

@coviex là câu trả lời/ký hiệu cũ. Đã cập nhật câu trả lời của tôi. –

5

Regex này phù hợp với tôi. ({Id} yêu cầu được đề xuất bởi Michael)

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

để hoàn thành, bạn có thể thêm vào yêu cầu: id: \ d + – Michael

1

nếu bạn cố gắng này, nó sẽ ném một lỗi như thế này:

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

như xem trong http://symfony.com/doc/current/cookbook/routing/slash_in_parameter.html bạn phải sử dụng:

sên: ". +"

Các vấn đề liên quan