2012-03-20 85 views
2

我想知道如何執行某個功能,如果cakephp保存中的某個字段已更新。檢查如果Cakephp更新更新更改變量

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)); 
     } 
    } 
} 

那麼 - 我想要做的是能夠確定到底發生了什麼在編輯數據($這個 - >數據)被改變,如果某一個領域已經改變發送電子郵件通知。我知道如何做電子郵件的一部分 - 但不知道如何讓我說如果讓一個選擇框從啓用更改爲禁用。如果從啓用更改爲禁用電子郵件說blah等等等已被禁用。

+0

在上面的代碼中,你只是試圖插入不更新。 – 2012-03-20 17:27:55

+0

那麼這是否意味着我沒有正確編輯?代碼對我來說工作得很好......我只是假設cakephp保存功能是「聰明的」,因爲它會創建一個帖子或更新它,具體取決於...我仍然在學習! – dingerkingh 2012-03-20 17:34:08

+0

如果你正在更新,你應該先設置$ this-> Post-> id,對吧? – 2012-03-20 17:35:48

回答

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

正如馬克說,這將是清潔劑acomplish這種直接在模型(例如,在案件中的數據以不同的形式發生變化)

+0

這正是我想要的。謝謝!我就如何調試$ this-> data來查看信息,因爲它正在重定向,我畫了一個空白。我剛剛停止了重定向,所以我可以看到$ this-> data的print_r。再次感謝! – dingerkingh 2012-03-21 10:39:11

+0

但不應該在afterSave()中完成?如果驗證失敗並且記錄未被修改,該怎麼辦? – mark 2012-03-21 14:42:56

+0

你是對的,但我描述瞭如何在控制器中獲得這項工作 - 因爲我認爲它最適合這個問題。當然,它會在模型​​中更清潔,或者作爲行爲。我更新了答案以解決驗證問題。 – Nebel54 2012-03-22 09:30:54

3

看看在爲loggable行爲: https://github.com/alkemann/CakePHP-Assets/blob/master/models/behaviors/logable.php

它確實以一種乾淨的方式。

而不是把它放在這個模型中,這將是一個更清潔的方法來創建自己的自定義行爲。你應該能夠根據你的需要修改它,以便它發送一封電子郵件。

+0

雖然這看起來像它會做我想要的 - 我認爲這可能是我的應用程序的矯枉過正。很高興知道,但在未來! – dingerkingh 2012-03-21 10:37:56