Symfony2 как разрешить пробой с тире в регулярных выражениях маршрута?

Мой маршрут (slug содержит тире!):

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

В шаблоне Twig:

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

Я получаю ошибку относительно соответствия регулярных выражений. Вопрос: почему Symfony2 не разрешает тире в URL? Как я могу указать, что мой маршрут содержит тире (и это отлично)?

Во время рендеринга шаблона было выбрано исключение ( "Параметр" slug "для маршрутной области" должен "соответствовать" [^/-] +? "(" valle-d-aosta-vallee-d-aoste").))

3 ответа

Порезы по умолчанию запрещены. Вы можете включить их, изменив требования по умолчанию. В вашем случае было бы неплохо дать требования к идентификатору, поскольку он разделен тире.

См. пример ниже.

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


Это регулярное выражение работает для меня. ({id}, предложенное Майклом)

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


если вы попробуете это, он выдает такую ​​ошибку:

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

если смотреть в http://symfony.com/doc/current/cookbook/routing/slash_in_parameter.html вы должны использовать:

slug: ". +"

licensed under cc by-sa 3.0 with attribution.