2016-08-04 14 views
1

を書いていない私は2つの経路を有する:symfonyのルーティング:経路()メソッドは、デフォルトのPARAM値を

// routing.yml 
foo_list: 
    path: /foo 
    defaults: { _controller:MyBundle:Foo:index } 

foo_view: 
    path: /foo/{id} 
    defaults: 
     _controller: AlfnooBundle:Exploitant:view 
     id : 1 
    requirements: 
     id: \d* 

最初のものは、すべてFOOSを一覧表示ページに対して、第1のどの表示ページでありますfoo nの詳細なビュー{id}。私の小枝ビューでは、私はこのようなfoo_viewへのリンクを生成します。

{{path('foo_view', {'id': foo.id})}} 

id1(デフォルト値)でない場合、それはOKです:/foo/12345。しかし、id1の場合、path()メソッドは間違ったURLを生成し、idパラメータを無視し、生成されたルートは/fooです。 foo_viewではなく、foo_listです。デフォルト値を変更した場合、問題はデフォルト値です。

{{path('foo_view', {'id': 1})}}  => /foo  => BAD ! I want /foo/1 
{{path('foo_view', {'id': 123})}} => /foo/123 => GOOD 

は、どのように私はそれがデフォルト値であっても、常にPARAM値を追加するために小枝path()方法を強制することができますか?私は嫌がらせのURLを保持したい:

/foo   => foo_list 
/foo/   => foo_view with id=1 
/foo/12345  => foo_view with id=12345 

ありがとう。

+0

idのデフォルト値を削除しないのはなぜですか? – DOZ

+0

@DOZ私はurl '/ foo'とurl'/foo/'のためのdistinctsアクションを必要とし、idを有効にしないで'/foo/'を(デフォルトでは1で)保持します。 –

+0

要件を付けて、デフォルトを削除してください... @Alsatianと – Alsatian

答えて

2

少なくともこのようにはできません。 symfonyのルータは、スラッシュの後ろにパスを生成しません。

path('foo_view')によって生成されたパスは常に/fooになり、あなたが見てきたように、パスは、どちらか/foo/1になることはありませんidのデフォルトを指定したので、/foo/も、決してます。

そこにis a way to coerce trailing slashesしかし、あなたが私に尋ねるならば、それは不器用です。

関連する問題