2013-01-15 58 views
0

我正在afterSave中处理消息模型。每次创建消息时,我都希望发送一封电子邮件通知收件人他们的新消息。我在发送邮件的邮件控制器中有一个动作,我想从afterSave中调用它。cakephp你如何在模型中调用控制器的动作

我已经打过电话这样的:

function afterSave($created){ 
    if($created){ 
     $this->msgToEmail($this->data); 
    } 
} 

我得到一个SQL错误,因为它看起来该函数的模型,而不是在控制器内。

如何声明模型函数?可能吗?

+0

我使用的是版本1.3 – okwme

+1

你不用!你在其他模型中使用模型方法,永远不会有控制器!所以让你的代码成为模型方法。那么你可以很容易地使用它。 – mark

回答

4

您使用其它型号的内部模型方法,永远一个控制器!

因此,让你的代码成为模型方法。那么你可以很容易地使用它。

1.3您现在可以在模型方法中对组件进行破解。直到你可以最终升级到2.x.

App::import('Component', 'Email'); 
$this->Controller = new Controller(); 
$this->Email = new EmailComponent(null); 
$this->Email->initialize($this->Controller); 
// from/to/subject/... 
$this->Controller->set('text', $this->data['Model']['content']); 
return $this->Email->send(); 
+0

这真是太好了,谢谢! – okwme

+0

但我如何处理从模型渲染视图?当我使用$ this-> set()时,我的变量不会进入模板文件。 – okwme

+0

我刚刚加了个例子 – mark

1

要声明模型方法,只需将其放入模型中(而不是控制器)。

模型中的文件:

public function msgToEmail($data) { 
    // code to send your email... 
} 

而且,不要忘了在你的模型文件的顶部导入CakeEmail

App::uses('CakeEmail', 'Network/Email'); 
+0

正确!自己发送模型中的电子邮件。同时删除从您的控制器发送电子邮件代码这是一个反模式到MVC。我喜欢创建一个特定于发送电子邮件的模型,我只是在我需要的模型中“导入”模型。 –

+0

我使用的是版本1.3,其中电子邮件只是一个组件。应用程序:使用不适用于声明组件。如果我制作电子邮件模型,我是否仍需要以某种方式访问​​该组件? – okwme

相关问题