使用CakePHP中控制器外部的组件

时间:2009-10-27 01:13:01

标签: php email cakephp components

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

我知道这可能显示出一个设计缺陷,而且我不是以Cake方式做某事,但是我有一个类与任何模型/控制器无关,我希望能够发送电子邮件。导入EmailComponent不起作用,因为它试图从$this->Controller读取信息,在这种情况下显然为空。

有什么建议吗?

3 个答案:

答案 0 :(得分:4)

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,应该适合你。

答案 1 :(得分:1)

尝试使用App::import

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

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

答案 2 :(得分:0)

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

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