2013-05-02 21 views
2

我正在調查CakePHP的(2.3.4)型號::保存方法將新記錄保存期間允許部分空白數據,跑了一個小障礙:CakePHP的型號::記錄插入

//Two fields provided, email field intended to fail validation 
$data = array('Member' => array(
    'username' => 'hello', 
    'email' => 'world' 
)); 
$this->Member->create(); 
var_dump($this->Member->save($data, true)); 

上述保存()將返回false,並且沒有數據將被寫入數據庫。但是,如果我將數據更改爲:

//One field provided, intended to pass validation 
$data = array('Member' => array(
    'username' => 'hello' 
)); 

然後save()將嘗試使用空白電子郵件字段向數據庫寫入新記錄。我意識到,在更新期間跳過對未指定字段的驗證可能是一種有用的行爲,但是在創建新記錄時,有沒有CakePHP推薦的方法來處理部分空的數據集?非常感謝。

編輯: 感謝Sam Delaney的提示。如果任何人被難倒,這並獲得成功:CakePHP Data Validation: field 'required' key

此鍵可以接受一個布爾值,或創建或更新。將此鍵設置爲true將使該字段始終是必需的。將其設置爲創建或更新將使該字段僅用於更新或創建操作。 如果'required'被評估爲true,則該字段必須存在於數據數組中。例如,如果驗證規則被定義如下:

我原本烤的模型,並忘記了required => true被冷落的驗證規則。將它設置爲true'create'可以避免由於亂碼數據數組而導致插入空白記錄。

回答

1

恕我直言,你所經歷的是期望的行爲。考慮你在表單中有兩個相同的字段,並且用戶只提供一個值爲username。儘管email爲空,但usernameemail字段均已提交。然後在服務器上,您嘗試保存記錄,只是發現它沒有通過您向用戶反饋的驗證。另一方面,也許在您的系統中,創建一個用戶而不需要電子郵件(例如root訪問帳戶)是完全可能的,CakePHP的驗證實現允許這兩種情況。

如果這種靈活性是不是你想要什麼,只爲您的驗證規則的required屬性作爲true

public $validate = array(
    'email' => array(
     'rule'  => 'email', 
     'required' => true 
    ) 
); 

這將滿足您的全有或全無要求。

+0

謝謝,所需的標誌絕對是我正在尋找的。您對所佈置的場景是正確的,並且我在模型更新期間使用過此行爲。我遇到的問題是將隨機無意義的數據發佈到操作中,跳過驗證並創建了一堆空記錄。設置required => true肯定會強制驗證數據數組中缺少的字段。 – Dedy 2013-05-02 07:43:02