0

我在消息模型中的 afterSave 中工作。我想在每次创建消息时发送一封电子邮件以通知收件人他们的新消息。我在消息控制器中有一个发送电子邮件的操作,我想从 afterSave 中调用它。

我试过这样称呼它:

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

我收到一个 sql 错误,因为它在模型内部而不是控制器中查找函数。

如何声明模型函数?是否可以?

4

2 回答 2

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();
于 2013-01-15T17:44:52.683 回答
1

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

在您的模型文件中:

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

另外,不要忘记CakeEmail在模型文件的顶部导入:

App::uses('CakeEmail', 'Network/Email');
于 2013-01-15T17:20:14.433 回答