2012-01-23 70 views
0

我試圖從模型內手動驗證數組,但驗證成功,無論我在數組中填充了哪些無效數據。

在我CustomerLocation模型我試圖驗證$數據:

$this->create(); 
$this->set($data); 
if (!$this->validates()){ 
    //some action if validation fails 
} 

在這種情況下,$數據是一個簡單的數組:

Array 
(
[location_number] => 125-Knoxville - M 
[packing_notes] => Test 
[packing_label_message] => packing message 
[length] => 4 
[width] => 4 
[height] => 4 
[weight] => 4 
[shipping_carrier] => UPS 
[shipping_service] => 2nd Day Air 
[ship_date] => 
[id] => 768 
[row] => 4 
) 

的$以上數據包含任何所需的CustomerLocation模型的字段,所以它應該完全失敗驗證。

此$數據的來源是一個導入的.csv行。當我從這個模型的烘焙蛋糕形式進行驗證時,驗證就起作用了。

我的$ data數組未正確格式化$ this-> validates?如果是這樣的話,我會期待它失敗而不是通過。

任何建議當然讚賞!

+1

您的驗證規則是什麼?我很肯定你的錯誤 – mark

+0

如果沒有看到你的驗證規則,我猜你需要爲你的驗證規則添加'required'選項,這可能是@mark正在獲取的。你會想在這裏閱讀:http://book.cakephp.org/1.3/en/view/1145/One-Rule-Per-Field – Joep

回答

0

一目瞭然,我認爲你需要改變$this->set($data);到:

$this->set(array('CustomerLocation' => $data)); 

CakePHP的使用數組的第一級,以確定哪種模式(S)來驗證。由於沒有任何鍵與型號名稱匹配(即,您沒有LocationNumberPackingNotes型號),因此未找到或應用驗證規則。

+0

可悲的是,同樣的結果,但我認爲你是正確的$數據將需要像這樣構成。它似乎無視我輸入的任何數據,至少從模型來看。 –

+1

@deizel:多數民衆贊成在錯誤。你不需要模型別名。如果數組是平的,它將自動解開數組並將其與模型別名一起使用(請參見模型類的第1132行)。 – mark

1

事實證明,我需要有:

'required' => true 
中每個字段的驗證規則

notempty規則只適用於當Cake從表單驗證時,顯然。我原本應該發佈我的規則。我相信有人會抓住這一點。