2009-11-17 39 views
11

我有一個模型,我需要做一些處理之前保存(或在某些情況下與編輯),但通常不是簡單的編輯時。事實上,如果我對大多數編輯進行處理,結果字段將會出錯。現在,我正在模型的beforeSave回調中工作。我如何知道我是來自編輯還是添加?如何判斷我是否在編輯或創建之前保存? CakePHP

弗蘭克盧克

回答

19
function beforeSave() { 
    if (!$this->id && !isset($this->data[$this->alias][$this->primaryKey])) { 
    // insert 
    } else { 
    // edit 
    } 
    return true; 
} 
+0

謝謝。完美工作。 – 2009-11-19 22:52:25

+1

稍微好一點的方法是使用'!isset'測試,而不是使用'empty'測試。這樣,如果數據數組中的主鍵字段恰好存在,但是爲空(有時候當您共享添加和編輯視圖時),那麼它仍然會將其識別爲保存新記錄。 – 2013-06-05 06:45:39

+0

這對cakephp3不適用。對於Cakephp 3版本,請查看https://stackoverflow.com/a/25589117/1152756 – jpruizs 2017-12-21 03:07:58

9

這是基本相同neilcrookes的回答,但我使用empty()作爲測試,而不是!isset()

如果數組鍵存在,但是爲空,那麼!isset將返回false,而empty將返回true。

我喜歡使用相同的視圖文件進行添加和編輯,以使我的代碼保持乾燥,這意味着在添加記錄時,'id'鍵仍將設置,但不會保留任何內容。 Cake可以處理這種情況,除了neilcrookes版本的代碼不會將它識別爲add,因爲primaryKey鍵在數據數組中設置(即使它不包含任何內容)。因此,改變!isset爲這種情況清空賬戶。

function beforeSave() { 
    if (!$this->id && empty($this->data[$this->alias][$this->primaryKey])) { 
    // insert 
    } else { 
    // edit 
    } 
    return true; 
} 
相關問題