7

我有一个助手可以将不同的字符串更改为日期。通过这个 +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);

这段代码运行良好,但我想知道是否有更好/更简单的方法。

4

1 回答 1

10

是的,有。不要让它成为帮手!

助手仅用于视图级别。如果您在控制器中需要它,那么您的设计是错误的。

所以让它成为一个 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

对于 Lib“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、CakeNumber 和 String 类的处理方式(详见代码)。

于 2012-11-12T15:58:53.180 回答