在 CakePHP 中使用控制器之外的组件

Posted

技术标签:

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

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

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

有什么建议吗?

【问题讨论】:

【参考方案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);

【讨论】:

以上是关于在 CakePHP 中使用控制器之外的组件的主要内容,如果未能解决你的问题,请参考以下文章

在模型中使用 cakephp 组件

CakePHP 3组件在一个单元格中

Cakephp 在组件中使用缓存

如何在 CakePhp 组件中调用回调?

这个回调如何对 cakePHP 组件起作用?

在Windows 10中默认安装CakePHP后,控制器文件丢失