我不想将其添加如下,因为我在某些操作方法中只需要它一次
(所以不要无用加载内存)
class UsersController extends AppController {
var $name = 'Users';
var $helpers = array('Html', 'Session');
var $components = array('Session', 'Email');
答案 0 :(得分:7)
class UsersController extends AppController {
public function method_name() {
$this->helpers[] = 'MyHelper'
}
}
有关此in the documentation的详情。
希望有所帮助。
答案 1 :(得分:0)
您可以使用
加载帮助程序$this->helpers[] = 'MyHelper';
正如Rob上面提到的那样,但这对控制器不起作用,因为它们需要调用初始化和启动方法才能使它们工作。
我在Web上遇到了一些用于在控制器操作中加载组件的代码:ComponentLoaderComponent
是的,它是一个组件,但它不是很大,因此将它包含在您的控制器中不应该是一个问题。
或者您可以只研究它以查看组件加载的工作方式,然后编写自己的控制器操作来执行相同操作。
答案 2 :(得分:0)
我使用组件动态添加帮助程序和组件:
$this->Common->addHelper('Tools.Datetime');
$this->Common->addHelper(array('Text', 'Number', ...));
$this->Common->addComponent('RequestHandler');
$this->Common->addLib(array('MarkupLib'=>array('type'=>'php'), ...));
等
我刚刚打开的cakephp增强票证中可以看到完整的代码: http://cakephp.lighthouseapp.com/projects/42648-cakephp/tickets/1277
或使用php标记: http://www.dereuromark.de/2010/11/10/loading-classes-on-the-fly/
它还解决了mtnorthrop发布的解决方案的一些小问题。 插件以及传递的选项现在都可以实现。玩得开心。