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: ". +"