在 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 中使用控制器之外的组件的主要内容,如果未能解决你的问题,请参考以下文章