2012-11-12 89 views
7

我有一個幫助器,它將不同的字符串更改爲日期。 由此+5變爲2012-11-17(距今天5天),5變成2012-11-05(今年,本月,給定日期)。在控制器中使用cakephp幫手

我想在我的控制器中使用相同的東西。

App::uses('EasyDateHelper', 'View/Helper'); 
App::uses('View', 'View'); 
$this->View = new View($this->Controller); 
$easyDate = new EasyDateHelper($this->View); 

此代碼運行良好,但我想知道是否有更好/更簡單的方法來做。

+1

你沒有指定你的cakephp版本! – mark

+0

這是cakephp 2.2.3 – rrd

回答

10

是的,有。 不要讓它成爲幫手!

助手只能用於視圖級別的設計。 如果你在控制器中需要它,你的設計是錯誤的。

因此,使它成爲一個lib類等,並以這種方式在你的控制器中使用它。 並且在你的幫助器中使用相同的lib或者創建一個包裝輔助器(類似於TextHelper的String,NumberHelper的CakeNumber,TimeHelper的CakeTime等)來輕鬆訪問視圖範圍中的方法。

對於更復雜的解決方案,看看會議:

CakeSession is the lib class. 
SessionComponent wraps it for the controller layer 
SessionHelper wraps it for the view layer 

對於庫「DateLib」(你可以命名爲任何你喜歡,只要類名在整個應用程序,核心是唯一的): 可以將它放在/ Lib /或/ Lib/PackageName中,而PackageName可以由您定義(例如「Utility」)。最好用PackageName進行分組,而不是直接放在Lib中。

/Lib/Utility/DateLib.php 

並在代碼:

App::uses('DateLib', 'Utility'); 

$date = DateLib::format(); // for static methods 

$DateLib = new DateLib(); 
$date = $DateLib->format(); // creating an extra object here 

如果你能,你應該靜態方法工作。這也是蛋糕爲CakeTime,CakeNumber和String類所做的方式(請參閱代碼以獲取詳細信息)。

+0

我會研究這個。我認爲這是我需要的。 – rrd

+0

我應該在哪裏放置我的lib類? – rrd

+0

我更新了我的答案 – mark