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.