2017-10-20 52 views
1

我正在構建多步表單輸入(「嚮導」),其中用戶通過多個表單輸入視圖輸入實體的某些部分。在每一步中,我只想驗證輸入數據(而不是整個實體)。Validaing帶有錯誤的多個特定表單字段()

我的問題是如何使用錯誤()與字段名稱的數組。

該模型有12個帶有驗證規則的字段。我想在一個控制器操作中驗證其中的3個。

因此,在這種控制器動作,我得到三個輸入

$thedata = $this->request->data; 

這導致:

['number' => '102','color' => 'blue','size' => 'large'] 

我那麼做字段名的數組:

$thearray = array_keys($thedata); 

這結果於:

[ 
(int) 0 => 'number', 
(int) 1 => 'color', 
(int) 2 => 'size'] 

現在我想檢查這三個字段的錯誤。

$errors = $this->Items->newEntity($this->request->data)->errors($thearray); 

這導致檢查與驗證所有12個領域的定義,不只是這三個數組中,並驗證失敗(它拿起在實體中的所有錯誤)。

如果我只定義一個字段,檢查它的工作原理:

$errors = $this->Items->newEntity($this->request->data)->errors('number'); 

這正確驗證僅領域「號」併產生期望的結果。

但是,傳遞字段數組而不是使用單個字段名稱的字符串會驗證所有需要驗證的字段。

另外,我試圖硬編碼數組作爲誤差(的參數):

$errors = $this->Items->newEntity($this->request->data)->errors(['number','color']); 

即還檢查在表中定義的所有12個字段,不只是這兩個。

所以問題是,如果您只想檢查兩個或三個特定字段,如何準備數組並將其傳遞給errors()方法?

在此先感謝您的任何建議! d

感謝

回答

0

根據the docserrors可以採取$field參數,但不能陣列。如果要驗證多個字段而不驗證所有字段,則可以循環使用$thearray

$item = $this->Items->newEntity($this->request->data); 

foreach ($thearray as $error) { 
    $errors[] = $item->errors($error); 
} 
+0

謝謝比爾。我也想到了這一點,但在API文檔[這裏](https://api.cakephp.org/3.5/class-Cake.Datasource.EntityInterface.html#_errors)中發現它應該能夠採取數組也是如此。這將是很好的...但foreach可以解決它。也許是一個錯誤? – dividedbyzero

+0

@dividedbyzero哦,這很有趣。是的,它看起來像你的原代碼應該工作。 – bill

+1

也許我會在github上發佈它。同時,我認爲循環應該這樣做。再次感謝,祝你週末愉快! – dividedbyzero

相關問題