2012-12-10 41 views
0

我試圖自定義CakePHP 2.0窗體幫助器上的錯誤輸出。目前,表單在輸入下面呈現錯誤消息並將「錯誤」類應用於輸入的標籤。CakePHP表單助手 - 顯示錯誤類,但不是錯誤消息

我發現我既可以禁用輸入的錯誤報告,也可以輸出錯誤類和消息。

我想錯誤類別要應用於有問題的輸入的標籤,沒有任何消息在下面。

你怎麼關閉輸出的形式錯誤消息,但仍然適用錯誤類來得罪標籤?

回答

2

FormHelper::input()format選項。它是一個

元素順序的格式模板。任何不在數組中的元素都不會出現在輸出中。

默認輸入格式順序:陣列(「前」,「後」「」之間「標籤」,「輸入」,「錯誤」)

可以傳遞默認格式,留出所述'error'

echo $this->Form->input(
    'some_field', 
    array('format' => array('before', 'label', 'between', 'input', 'after')) 
); 

這應該產生輸入標記沒有錯誤消息。

如果你想在你的形式是應用於多個輸入,你應該把它幹:

$format = array('before', 'label', 'between', 'input', 'after'); 
echo $this->Form->input(
    'some_field', 
    array('format' => $format) 
); 
echo $this->Form->input(
    'some_other_field', 
    array('format' => $format) 
); 

也可以通過將設置爲形式的所有輸入的默認格式格式FormHelper::create()inputDefaults

$this->Form->create(
    'MyModel', 
    array(
     'inputDefaults' => array(
      'format' => array('before', 'label', 'between', 'input', 'after') 
     ) 
    ) 
); 
+0

這太好了。但是有沒有辦法爲整個$ this-> Form元素設置?我正在處理一個相當複雜的表單,並且希望避免向每個輸入添加配置詳細信息... –

+0

沒有我知道的中央選項。添加了一個例子,至少指定格式只有一次。如果你絕對不想觸及你的'input()'調用,你可以在一個自定義的類中重載'FormHelper :: input()',但這並不會讓它變得更乾淨,我想。 – pixelistik

+0

關閉你的建議,我發現你可以在$ this-> Form-> create()調用中設置'format'選項,並且將它應用到表單中的每個字段。如果你可以加上這個答案,對於後代,我會很感激。例如:'$ this-> Form-> create('ModelName',array('inputDefaults'=> array('format'=> array('before','label','between','input','after '))));' –

0

您必須手動執行一些操作。首先關閉驗證,並在Form Helper上標籤生成。

echo $this->Form->input('myfield', array('error' => false, 'label' => false)); 

然後將該類添加到創建標籤並添加錯誤類,如果驗證失敗。要找出失敗的驗證檢查invalidFields陣列像這樣:

$error = null; 
if (isset($this->invalidFields['Model']['myfield'])) { 
    $error = 'error'; 
} 

echo $this->Form->label('myfield', 'My Field', array('class' => $error)); 
+0

謝謝。這將工作,但我正在尋找一種方法來做到這一點,而不必顯式檢查/設置每個字段的標籤類。 pixelistik的答案更接近我所尋找的。 –

0

您可以隨時使用Form->error('field_name')這應該返回什麼,如果沒有錯誤。

$error = $this->Form->error('field_name'); 
echo $this->Html->input('field_name', array(
    'class' => !empty($error) ? 'error' : null, 
    'error' => false 
)); 

你現在有與通常標記爲錯誤可能被顯示在另一個位置$錯誤。

有沒有辦法讓周圍沒有檢查時,Form->input()方法是不一樣的錯誤,div的,自動的標籤,其可以通過Form->label()完成,Form->checkbox()Form->select()等,這是唯一的基本要素所有這些東西一個舒適的方法。

可以傳遞給Form->create()的選項之一是inputDefaults,您可以使用該選項爲所有其他表單元素設置默認值。這不會像你在場上一樣。 ('error' => false會有所幫助)

您可以做的另一件事是做自己的窗體幫助器,擴展核心FormHelper並自定義輸入法來自動執行此操作。您可以使用aliasing將您的自定義幫助程序加載到$this->Form以正常使用。請參閱本節的底部。

你也可以在AppHelper中重載輸入法,但這不是一個好的選擇。