2012-01-27 86 views
4

我想使用CakePHP驗證而不使用save()。 但它總是返回錯誤。我插入文本,但驗證說它是空的。爲什麼?cakephp驗證不保存()

我的模型:

var $validate = array(
    'm_subject' => array(   
     'empty' => array(
      'rule' => 'notEmpty', 
      'required' => true, 
      'allowEmpty' => false, 
      'message' => 'Subject is empty', 
     ) 
    ), 
    'm_text' => array(
     'empty' => array(
      'rule' => 'notEmpty', 
      'required' => true, 
      'allowEmpty' => false, 
      'message' => 'Text is empty', 
     ) 
    ) 
); 

在我的控制器:

$this->Admin->set($this->data); 
if($this->Admin->validates($this->data, array('m_subject', 'm_text'))) { 
    //OK 
} 
else {   
    $errors = $this->Admin->invalidFields(); 
    pr($errors); //Always returns "Subject is empty" and "Text is empty". 
} 
+0

試試我的解決方案,因爲它爲我工作。 – Vins 2012-08-22 09:51:49

回答

2

那是因爲你不應該在這種情況下需要使用。 它需要在$ this-> data中存在這些字段,否則。

閱讀部分約在這裏: http://www.dereuromark.de/2010/09/21/saving-model-data-and-security/

哦,現在我看到這個問題。你正在使用validates()不正確!您需要先設置數據:

$this->User->set($this->data); 
$res = $this->User->validates(); 

但那是相當不錯的文檔......

+0

$ this-> data - 從post方法獲得的所有數據 – lolalola 2012-01-27 13:46:59

+0

我添加了這個「$ this-> user-> set($ this-> data);」,但是是同樣的問題。 – lolalola 2012-01-27 15:04:05

+0

當然是。正如我剛剛告訴你的,數組需要包含所有「必需」鍵(它可能不會)。因此您應該將這些行放入您的閥陣列中。 – mark 2012-01-27 20:37:44

10

在這兩個CakePHP 2.0CakePHP 1.3

$this->ModelName->validates();如果傳遞什麼不帶數據的數組validates()它是一個選項陣列,然後由modelCallback處理beforeValidates()

如果您想確定數據是否爲val,請嘗試使用此邏輯id:

$this->ModelName->set($this->data); 
if ($this->ModelName->validates()) { 
    // Data Validated 
} else { 
    // Data Not Validated 
} 
1

在類似的說明in CakePHP 2.0 Model中,只有在saveAll()上有一個驗證選項。

驗證:設置爲false來禁用驗證,真正的節約,「第一」,以驗證所有記錄之前驗證每個記錄任何保存之前(默認值),或「僅僅」只驗證記錄,但不保存它們。

0

一切看起來不錯。確保,鑑於您已經創建的形式就是這樣,如果你使用CakePHP的方法來創建形式

<?php echo $this->Form->create("Admin"); ?> 

這裏的「管理員」是型號名稱。

0

分配

$this->data['ModelName']['m_subject'] = $this->data['ModelName']['m_subject']['name'] 
$this->data['ModelName']['m_text'] = $this->data['ModelName']['m_text']['name'] 

因爲

由於文件上傳始終是一個數組,它看起來像這樣。

'm_subject' => array(
     'name' => 'foobar', 
     'size' => 1234567, 
     'error' => 0, 
     ... 
    ) 

因此,它總是會給你錯誤。因爲它正在尋找字符串並找到數組。