在控制器中使用cakephp helper

rrd*_*rrd 7 cakephp

我有一个帮助器,可以将不同的字符串更改为日期.由此+5成为2012-11-17(从今天起5天),5成为2012-11-05(今年,本月,给定日).

我想在我的控制器中使用相同的东西.

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

这段代码效果很好,但我想知道是否有更好/更简单的方法.

mar*_*ark 10

是的,有.不要成为帮手!

帮助者仅针对视图级别进行设计.如果你需要它在控制器中,你的设计是错误的.

所以把它变成一个lib类等,并以这种方式在你的控制器中使用它.并在助手中使用相同的lib或创建一个包装助手(类似于String的TextHelper,CakeNumber的NumberHelper,CakeTime的TimeHelper等),以便轻松访问视图范围中的方法.

有关更复杂的解决方案,请查看Sessions:

CakeSession is the lib class.
SessionComponent wraps it for the controller layer
SessionHelper wraps it for the view layer
Run Code Online (Sandbox Code Playgroud)

对于Lib"DateLib"(只要类名在整个应用程序和核心中是唯一的,您可以将其命名为任何名称):将其放在/ Lib /或/ Lib/PackageName中,而PackageName可以由您定义(例如"效用").最好按PackageName分组,而不是直接将它放在Lib中.

/Lib/Utility/DateLib.php
Run Code Online (Sandbox Code Playgroud)

在你的代码中:

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

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

$DateLib = new DateLib();
$date = $DateLib->format(); // creating an extra object here
Run Code Online (Sandbox Code Playgroud)

如果你可以使用静态方法.这也是Cake对CakeTime,CakeNumber和String类的处理方式(详见代码).