【问题标题】:How to add helper or component on-the-fly with the controller action method如何使用控制器操作方法即时添加帮助程序或组件
【发布时间】:2010-11-08 16:24:36
【问题描述】:

我不想像下面那样添加它,因为我在某些操作方法中只需要它们一次

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

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

【问题讨论】:

    标签: cakephp on-the-fly


    【解决方案1】:
    class UsersController extends AppController {
      public function method_name() {
        $this->helpers[] = 'MyHelper'
      }
    }
    

    更多关于in the documentation

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      您可以使用加载帮助程序

      $this->helpers[] = 'MyHelper';
      

      正如 Rob 上面提到的,但这不适用于控制器,因为它们需要调用它们的初始化和启动方法才能使它们工作。

      我在网上看到了一些代码,用于在控制器操作中加载组件:ComponentLoaderComponent

      是的,它是一个组件,但它不是很大,因此将它包含在您的控制器中应该不是问题。

      或者你可以研究它来看看组件加载是如何工作的,然后编写你自己的控制器动作来做同样的事情。

      【讨论】:

        【解决方案3】:

        我使用一个组件来动态添加助手和组件:

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

        【讨论】:

        • 唯一缺少的其他部分:function initialize($Controller = null) { $this->Controller = $Controller; }
        • 希望更新有所帮助 - 刚刚打开了一张支持此增强功能的票
        • 这不适用于 Auth 组件。 Auth 组件使用 Session 和 RequestHandler 组件,但是当您像这样导入和初始化它时,这两个组件就丢失了。我必须手动将它们添加到 Auth 组件中。
        猜你喜欢
        • 1970-01-01
        • 2013-12-21
        • 1970-01-01
        • 2019-06-14
        • 2023-03-05
        • 2016-02-09
        • 2015-12-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多