如何使用控制器操作方法即时添加帮助程序或组件

时间:2010-11-08 16:24:37

标签: cakephp on-the-fly

我不想将其添加如下,因为我在某些操作方法中只需要它一次

(所以不要无用加载内存)

class UsersController extends AppController {
    var $name = 'Users';
    var $helpers = array('Html', 'Session');
    var $components = array('Session', 'Email');

3 个答案:

答案 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发布的解决方案的一些小问题。 插件以及传递的选项现在都可以实现。玩得开心。

相关问题