在控制器中使用cakephp助手

在控制器中使用cakephp助手,cakephp,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-&g

我有一个助手,可以将不同的字符串更改为日期。 此时+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);
这段代码运行良好,但我想知道是否有更好/更简单的方法。

是的,有。 别让它成为帮手

辅助对象按设计仅适用于视图级别。 如果你在控制器中需要它,你的设计是错误的

因此,将其设置为lib类等,并以这种方式在控制器中使用它。 或者在助手中使用相同的库,或者制作一个包装器助手(类似于TextHelper for String、NumberHelper for CakenNumber、TimeHelper for CaketTime等),以便轻松访问视图范围中的方法

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

CakeSession is the lib class.
SessionComponent wraps it for the controller layer
SessionHelper wraps it for the view layer
对于库“DateLib”(您可以随意命名它,只要类名在整个应用程序和核心中是唯一的): 将其放在/Lib/或/Lib/PackageName中,而PackageName可以由您定义(例如“实用工具”)。最好通过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

如果你可以使用静态方法,你应该。cake对CakeTime、CakenNumber和String类也是这样做的(详细信息请参见代码)。

您没有指定cakephp版本!我会调查的。我想这就是我需要的。我应该把我的自由课放在哪里?