2010-10-08 65 views
2

我正在使用cakephp。我有一個元素數組的表單。 對於離: -cakephp無效元素數組

<textarea name="data[User][0][description]> 
<textarea name="data[User][1][description]> 

從控制器,我需要無效(手動地)的陣列字段,如果它是空的,並且需要顯示錯誤到相應字段。 如果它是一個元素數組,那麼使該字段無效的正確語法是什麼? 我知道,以下內容適用於單個元素。元素數組將如何?

$this->User->invalidate("description"); 
+0

爲什麼不在模型中使用驗證規則? – 2010-10-08 09:51:51

+0

上面的只是一個例子..我必須在輸出錯誤消息之前檢查多個字段。所以想到在控制器中這樣做。 – user470077 2010-10-08 10:08:13

+1

型號用於驗證控制器。而是在模型中進行 – dogmatic69 2010-10-08 16:20:28

回答

4

不幸的是,您無法使該功能無效。

但什麼invalidate()呢?

function invalidate($field, $value = true) { 
     if (!is_array($this->validationErrors)) { 
      $this->validationErrors = array(); 
     } 
     $this->validationErrors[$field] = $value; 
    } 

它只是設置模型的validationErrors。

所以,你可以在你的控制器做以下的(但我也呼籲你移動的模型驗證):

$this->User->validationErrors[1]['description'] = 'Your error message'; 

下面的代碼將在無效列表中的第二描述。

HTH

4

您可以輸入視圖:

<?php 
    echo $this->Form->error("User.1.description"); 
?> 
0

感謝尼克,

你的答案幫助我,但半途而廢,因爲我的問題是與其他子域的化合物領域。

account_number { 
    bank_code, 
    bank_office, 
    check_digit, 
    account 
} 

在這種情況下,如果我們需要把在驗證錯誤的一個子域,這是解決方案:

$this->Model->validationErrors['account_number']['bank_code'][0] = 'Your message error'; 

我希望幫助別人。

問候。

0

我有類似的問題,因爲它是用於管理面板我顯示對場,即第一級僅該部分的錯誤消息。

如果您在控制器上進行驗證,只需在字段名稱和錯誤消息中創建一個錯誤數組,並將其設置在控制器中並顯示消息(如果in_array($ field,$ withErrorArray))。