2016-08-04 80 views
1

我有兩個路線: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,第二個是顯示的頁面foo n的詳細視圖{ID}。在我的枝條的看法,我生成這樣的鏈接foo_view

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

這是確定的,如果id1(默認值):/foo/12345。但如果id1,則path()方法會生成一個錯誤的url,它將省略id param,生成的路由爲:/foo。這不是foo_view,而是foo_list。如果我更改默認值,則問題是默認值。

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

所以,我怎麼能強迫嫩枝path()方法來隨時添加的參數值的方式,即使是默認值?我想保留下列網址:

/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 /'的動作,並且保持'/ foo /'沒有id有效(默認爲1)。 –

+0

讓需求,並刪除默認... – Alsatian

回答

2

你不能這樣做,至少不是這樣。 Symfony的路由器不會生成帶有斜線的路徑。

通過path('foo_view')產生的路徑將永遠是/foo也永遠不會是/foo/既然你已經指定了默認id路徑絕不會/foo/1或者,如您所見。

There is a way to coerce trailing slashes但是,如果你問我,這很笨拙。