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").))
Ответы
Ответ 1
Порезы по умолчанию запрещены. Вы можете включить их, изменив требования по умолчанию. В вашем случае было бы неплохо дать требования к идентификатору, поскольку он разделен тире.
См. пример ниже.
region:
pattern: /regione/{slug}-{id}
defaults:
_controller: SWAItaliaInCifreBundle:Default:region
requirements:
slug: "[a-zA-Z1-9\-_\/]+"
id: "\d+"
Ответ 2
Это регулярное выражение работает для меня. ({id}, предложенное Майклом)
region:
pattern: /regione/{slug}-{id}
defaults: { _controller: SWAItaliaInCifreBundle:Default:region }
requirements:
slug: "[a-zA-Z0-9-_/]+"
id: "\d+"
Ответ 3
если вы попробуете это, он выдает такую ошибку:
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: ". +"