【问题标题】:Using components outside of controllers in CakePHP在 CakePHP 中使用控制器之外的组件
【发布时间】:2010-12-10 08:07:48
【问题描述】:

是否可以将内置的 CakePHP 组件(例如:EmailComponent)用作独立类?

我知道这可能显示了一个设计缺陷,而且我并没有像 Cake 那样做,但是我有一个不绑定到任何模型/控制器的类,我希望它能够发送电子邮件.导入 EmailComponent 不起作用,因为它尝试从 $this->Controller 读取信息,在这种情况下显然为空。

有什么建议吗?

【问题讨论】:

    标签: php email cakephp components


    【解决方案1】:

    尝试使用App::import

    App::import('Component', 'Email');
    $email = new EmailComponent();
    

    请注意,您可能需要在构造函数中将null 作为参数传递,因为我认为它通常可能需要对控制器的引用。这可能会导致与EmailComponent 定位布局和视图有关的问题,但您必须尝试一下。

    【讨论】:

    • 我认为这正是 OP 遇到的问题。 EmailComponent 在某些地方使用了控制器函数,因此传递 null 并没有多大帮助。
    • @deceze:是的,一针见血。
    【解决方案2】:
    App::import('Core', 'Controller');
    App::import('Component', 'Email');
    $this->Controller =& new Controller();
    $this->Email =& new EmailComponent(null);
    $this->Email->initialize($this->Controller);
    

    请参阅EmailComponent in a (cake) Shell 的评论 11,应该对您有用。

    【讨论】:

      【解决方案3】:

      我很确定这样做的蛋糕方法是让组件成为供应商,如果这不是太痛苦的话。然后它将可以在代码库中的任何地方访问。您可以在 beforeFilter 中使用此代码,并像使用控制器中的组件一样使用它。

      App::import('Vendor', 'EmailVendor');
      $this->EmailVendor = new EmailVendor($this);
      

      【讨论】:

        猜你喜欢
        • 2013-08-20
        • 1970-01-01
        • 2013-04-13
        • 2013-07-31
        • 2019-06-15
        • 2023-03-27
        • 2011-06-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多