2012-11-12 45 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