检查Cakephp更新是否更新了更新中的变量

时间:2012-03-20 17:12:31

标签: php cakephp web

我想知道如果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已被禁用。

2 个答案:

答案 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
    }
    ...

正如马克所说,在模型中直接实现这一点会更加清晰(例如,在数据以不同的形式更改的情况下)