2013-03-03 74 views
0

我有一個sfDoctrineRouteCollection:混亂塞與路線部分「新」等

foo: 
    class: sfDoctrineRouteCollection 
    options: 
    model: Foo 
    columns: slug 
    action: [list, show, new, create, edit, update, delete] 

如果有人現在創建一個新的實體,其蛞蝓的結果,例如,「新」,路由引擎獲取關於困惑用於創建新實體的兩條路線/foo/new以及用於顯示具有「新」的slu entity的實體的/foo/new

什麼是這個問題乾淨和優雅的解決方案?

當然,我可以提供顯式的路由定義,但這會使sfDoctrineRouteCollection種類過時。 「show」操作的單獨路由定義已經可以解決問題,例如,通過添加諸如「/ foo /:slug/show」的前綴。我也可以提供攔截「新」等slu custom的定製slugify方法。

您是否知道任何干淨優雅的解決方案?

+0

它是否有助於要麼使用prefix_path或segment_name選項,如下所示:http://www.symfonyreference.com/routing-yml? – meijuh 2013-03-03 18:58:47

+1

那麼,如果你有一個slug'new'的東西,並且你想看到它,它會進入'/ foo/new/show','/ foo/new'不應該顯示任何東西,因爲它不會顯示'不知道該怎麼辦..動作參數不存在。否則,你應該避免使用'slug'作爲'new',或者任何可能破壞路由的動作。 – j0k 2013-03-03 21:05:50

+1

@ j0k在這種情況下,「動作」是隱含的。 Symfony使用請求方法來查找正確的操作。 – 1ed 2013-03-04 22:13:40

回答

1

您可以使用segment_names選項更改new到別的東西,或者你可以使用一些更明確的像idid-slug或禁用with_show,並添加一個顯示object action

object_actions: { show: [get, head] }

+0

感謝您的回答。 'segment_names'不會這樣做,因爲相應的名字也可以用來創建一個新的對象。禁用標準show動作並定義一個額外的對象動作幾乎與提供顯式路由定義相同(正如我在我的問題中提到的那樣)。擴展slu would並不能完全解決問題。當然,創建一個包含id的匹配slu new的新對象將是一件非常具有挑戰性的事情。但這根本不是一個選項,因爲這是使用slug的原因之一:從URL中刪除id。 (恕我直言) – Flinsch 2013-03-07 15:42:48

+0

不過,謝謝你的回答。我想我會定義一個明確的顯示動作,比如'/ foo /:slug/show'。 – Flinsch 2013-03-07 15:44:12