我試圖自定義CakePHP 2.0窗體幫助器上的錯誤輸出。目前,表單在輸入下面呈現錯誤消息並將「錯誤」類應用於輸入的標籤。CakePHP表單助手 - 顯示錯誤類,但不是錯誤消息
我發現我既可以禁用輸入的錯誤報告,也可以輸出錯誤類和消息。
我想錯誤類別要應用於有問題的輸入的標籤,沒有任何消息在下面。
你怎麼關閉輸出的形式錯誤消息,但仍然適用錯誤類來得罪標籤?
我試圖自定義CakePHP 2.0窗體幫助器上的錯誤輸出。目前,表單在輸入下面呈現錯誤消息並將「錯誤」類應用於輸入的標籤。CakePHP表單助手 - 顯示錯誤類,但不是錯誤消息
我發現我既可以禁用輸入的錯誤報告,也可以輸出錯誤類和消息。
我想錯誤類別要應用於有問題的輸入的標籤,沒有任何消息在下面。
你怎麼關閉輸出的形式錯誤消息,但仍然適用錯誤類來得罪標籤?
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')
)
)
);
您必須手動執行一些操作。首先關閉驗證,並在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));
謝謝。這將工作,但我正在尋找一種方法來做到這一點,而不必顯式檢查/設置每個字段的標籤類。 pixelistik的答案更接近我所尋找的。 –
您可以隨時使用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
中重載輸入法,但這不是一個好的選擇。
這太好了。但是有沒有辦法爲整個$ this-> Form元素設置?我正在處理一個相當複雜的表單,並且希望避免向每個輸入添加配置詳細信息... –
沒有我知道的中央選項。添加了一個例子,至少指定格式只有一次。如果你絕對不想觸及你的'input()'調用,你可以在一個自定義的類中重載'FormHelper :: input()',但這並不會讓它變得更乾淨,我想。 – pixelistik
關閉你的建議,我發現你可以在$ this-> Form-> create()調用中設置'format'選項,並且將它應用到表單中的每個字段。如果你可以加上這個答案,對於後代,我會很感激。例如:'$ this-> Form-> create('ModelName',array('inputDefaults'=> array('format'=> array('before','label','between','input','after '))));' –