cakephp如何调用控制器&x27;模型内部的行为

cakephp如何调用控制器&x27;模型内部的行为,cakephp,model,controller,after-save,Cakephp,Model,Controller,After Save,我正在我的消息模型中的afterSave中工作。我想在每次创建邮件时发送一封电子邮件,通知收件人他们的新邮件。我在发送电子邮件的messages控制器中有一个操作,我想从afterSave调用它 我试着这样称呼它: function afterSave($created){ if($created){ $this->msgToEmail($this->data); } } 我得到一个sql错误,因为它在模型中查找函数,而不是控制器 如何声明模型函数?

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

我试着这样称呼它:

function afterSave($created){
    if($created){
        $this->msgToEmail($this->data);
    }
}
我得到一个sql错误,因为它在模型中查找函数,而不是控制器


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

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

在模型文件中:

public function msgToEmail($data) {
    // code to send your email...
}
App::uses('CakeEmail', 'Network/Email');
另外,不要忘记在模型文件顶部导入
CakeEmail

public function msgToEmail($data) {
    // code to send your email...
}
App::uses('CakeEmail', 'Network/Email');

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

在模型文件中:

public function msgToEmail($data) {
    // code to send your email...
}
App::uses('CakeEmail', 'Network/Email');
另外,不要忘记在模型文件顶部导入
CakeEmail

public function msgToEmail($data) {
    // code to send your email...
}
App::uses('CakeEmail', 'Network/Email');

您在其他模型中使用模型方法,而不是控制器

因此,让您的代码成为一个模型方法。这样你就可以很容易地使用它了

在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();

您在其他模型中使用模型方法,而不是控制器

因此,让您的代码成为一个模型方法。这样你就可以很容易地使用它了

在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();

对的发送电子邮件在您的模型它自己。另外,从控制器中删除发送电子邮件代码,这是MVC的反模式。我喜欢创建一个特定于发送电子邮件的模型,我只是在我需要的模型中“导入”它。我使用的是1.3版,其中电子邮件只是一个组件。应用程序:使用不适用于声明组件。如果我制作了一个电子邮件模型,我是否仍然需要以某种方式访问组件?正确!发送电子邮件在您的模型它自己。另外,从控制器中删除发送电子邮件代码,这是MVC的反模式。我喜欢创建一个特定于发送电子邮件的模型,我只是在我需要的模型中“导入”它。我使用的是1.3版,其中电子邮件只是一个组件。应用程序:使用不适用于声明组件。如果我制作了一个电子邮件模型,我是否仍然需要以某种方式访问组件?你不需要!您在其他模型中使用模型方法,而不是控制器!因此,让您的代码成为一个模型方法。然后你就可以很容易地使用它了!您在其他模型中使用模型方法,而不是控制器!因此,让您的代码成为一个模型方法。那么你就可以很容易地使用它了。但是我如何处理从模型渲染视图呢?使用$this->set()时,我的变量不会进入模板文件。但是如何处理从模型渲染视图?当我使用$this->set()时,我的变量不会进入模板文件。