2011-10-09 13 views
13

マイルート(スラグはダッシュが含まれています!):小枝テンプレートでSymfony2ルート正規表現でダッシュを持つスラッグを許可する方法は?

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

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

私は、正規表現のマッチングについてエラーを取得しています。 質問:なぜsymfony2はURLにダッシュを許可しないのですか?私のルートにダッシュが含まれていると指定するにはどうすればいいですか?

例外が領域 『ルートは、『テンプレート のレンダリング(「パラメータ』スラグ中にスローされました』と一致しなければなりません 『[^/- ]?+』 (」ヴァッレ-D-アオスタヴァレ-d-aoste "))。

答えて

16

スラッシュはデフォルトで禁止されています。デフォルトの要件を変更することで有効にすることができます。あなたのケースでは、それはダッシュで区切られているので、IDの要件を与えることも良いでしょう。

以下の例を参照してください。

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

末尾にスラッシュを追加すると、パターンの最後に '/'を追加できます。例えばパターン:/ regione/{slug} - {id}/- これのための正規表現は必要条件では必要ありません – Michael

+0

以下の答えは正しいものです。この設定には古い回答/表記法である間違った構造と表記 – coviex

+0

@coviexがあります。私の答えを更新しました。 –

5

この正規表現は私のために機能します。 (マイケルによって提案{ID}要件)

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

それを完成させるために、要件に追加することができます:id:\ d + – Michael

1

は、あなたがこれをしようとした場合、それは、このようなエラーがスローされます。http://symfony.com/doc/current/cookbook/routing/slash_in_parameter.html で見て

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

あなたが使用する必要があります。

スラグを: "+"

関連する問題