2009-12-26 26 views
0

我想重構我的Catalyst應用程序,我想爲我的控制器引入一個通用基類。這個基礎控制器會加載一些數據,併爲每個請求放入一些其他數據。我躲藏了一些麻煩。簡單的解決方案是在基本控制器中實施默認的auto操作。這有效,但我必須記得總是在派生控制器中調用超級auto。這很容易忘記,有沒有更好的解決方案?換句話說:是否有一種簡單的方法可以使用派生控制器中不容易破解的請求處理?如何訪問父控制器中的每個請求中的存儲器?

回答

3

我不認爲你需要繼承才能實現你的目標。您可能還有其他原因,爲什麼繼承對您的應用程序來說是一個好主意,但是當其他類組合的方法更合適時,繼承一般會被濫用。

特別是對於這種情況,Catalyst通過允許您在根控制器中指定auto方法來提供此功能,該方法將始終在您的更特定控制器的auto方法之前爲每個請求調用。不需要繼承。

+0

你說得對,我現在想要重構的代碼存在於根控制器中。我想移動它,因爲(a)我希望將常用控制器代碼與標題頁的代碼和根控制器提供的其他主要部分分開,(b)我真的很想擁有一些數據可以作爲'$ self'方法獲得,而不是一直經歷'$ c-> stash-> ...'環。 – zoul 2009-12-26 21:23:11

+2

@zoul:沒問題,但它的工作方向與框架相反,你需要在根控制器中放置常用的東西。如果你想分離出「主要」和「標題頁」的東西,爲什麼不把它作爲一個單獨的控制器,並在適當的時候將請求處理轉發出根?這會按照你想要的方式分離你的代碼,儘管它沒有爲你提供'$ c-> stash->'的快捷方式...... – 2009-12-26 21:54:29

相關問題