我想知道如果cakephp save中的特定字段已更新,我将如何执行某个功能。
function edit($id = null) {
if (!empty($this->data)) {
if ($this->Post->save($this->data)) {
$this->Session->setFlash(__('The post has been saved', true));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The post could not be saved. Please, try again.', true));
}
}
}
所以 - 我想要做的是能够准确确定编辑数据中的更改内容($ this->数据),如果某个字段已更改,则发送电子邮件通知。我知道如何处理电子邮件部分 - 但是如果我们将选择框从“已启用”更改为“已禁用”,则无法弄清楚如何执行此操作。如果从启用更改为禁用电子邮件,说blah blah blah已被禁用。
答案 0 :(得分:3)
看一下可记录的行为: https://github.com/alkemann/CakePHP-Assets/blob/master/models/behaviors/logable.php
它以干净的方式完成了这一点。
而不是将其放在此模型中,这将是一种更简洁的方法来创建自己的自定义行为。您应该能够根据需要对其进行修改,以便发送电子邮件。
答案 1 :(得分:2)
您可以在执行$ this-> Post-> save()之前读出当前保存的内容,并在保存后比较这些值。
if (!empty($this->data)) {
$oldValue=$this->Post->field('yourfield');
if ($this->Post->save($this->data)) {
if ($oldValue!=$this->data['Post']['yourfield'])
{
// do stuff
}
...
正如马克所说,在模型中直接实现这一点会更加清晰(例如,在数据以不同的形式更改的情况下)