2009-12-18 81 views
0

我有一個Page對象,其唯一性來自其PageDomain。架構配置爲使page表包含一個page_domain_id字段來創建關係。爲了顯示一個頁面,我有一個executeShow動作和一個自定義處理程序。我的路線是這樣的:將標準注入到sfPropelRoute對象中

page_show: 
    url:  /:domain_slug/:slug 
    class: sfPropelRoute 
    options: 
    model: Page 
    type: object 
    method_for_criteria: doSelectByDomain 
param: { module: page, action: show } 
requirements: 
    sf_method: [get] 

通過舉例的方式,我可能有/audience/create/behavior/create。我需要能夠確定哪個頁面被請求。

自定義處理程序(doSelectByDomain)的目的是考慮domain_slug,並且只在其域名也正確的情況下檢索/顯示頁面。但我發現,儘管參數在動作的$request參數中可用,但我無法將其獲取到自定義處理程序,因此可以將其分解爲檢索的內容。

我意識到我可以直接從我的模型訪問sfContext對象,但這樣做最多不過分,並打破了MVC。如果沒有更好的方法,我不害怕使用它,但似乎必須有。 Symfony爲列表路由提供setListCriteria方法,但我找不到任何類似的對象路由。

幫助?謝謝。

回答

3

因此,通過源代碼的一點冒險讓我得到了我需要的地方。看起來sfPropelRoute提供了method_for_criteria選項,但考慮到sfObjectRoutemethod選項,並且如果它存在,則使用它。如果僅存在method_for_criteria,則sfPropelRoute類將根據請求參數創建一個標準對象。

除了它不包含任何不屬於對象屬性的參數。我知道這個行爲有一個爭論,但在我看來這是一個錯誤。

無論如何,簡短版本是,如果您使用method選項,所有參數都會作爲數組傳遞給指定的處理程序(無編輯)。如果您需要的參數不是那些屬性的請求參數,這似乎是要走的路。

0

我不知道我完全理解你的問題(我讀過這個是爲了推進標籤,而不是Symfony標籤),但是來自Advent日曆的Advanced Routing章有任何幫助嗎?該代碼是爲教義,但我想你也可以適應Propel。