2013-01-02 26 views
1

我有一個「特殊」請求。我已經開始使用CakePHP 2.2.4幾天前,現在我正在使用Form Helper開發幾個小表單。如何使用CakePHP 2.2.4的Form Helper設置自定義錯誤類?

我看到表單助手自動管理錯誤(真棒!),但我需要做一些自定義。我知道我可以更改錯誤的類別(錯誤消息),並使用例如span而不是div

但是,我需要改變輸入IF的類如果有錯誤。

<?php 

echo $this->Form->input('User.email', array(
            'label' => array(                  
             'class' => 'name-form', 
             'text' => 'Email:' 
            ),                
            'div' => 'field', 
            'class' => 'input-xlarge' 
           ) 
         ); 

?> 

,你可以看到,我使用名爲類輸入XLARGE

我需要更改類,如果有一個錯誤。新類應該是input-xlarge-error。

此類僅更改輸入文字的邊框,將其設置爲紅色

這可能嗎?

謝謝!

回答

2

如果出現錯誤,爲什麼需要更改輸入類?

您可以使用已附加到外部div的類來定位輸入。

E.g.

div.error input { } 

然後,您可以以不同方式設置輸入樣式,如果有錯誤。

所有你的觀點需要的是:

<?php echo $this->Form->create('User'); ?> 
<?php echo $this->Form->input('email'); ?> 
<?php echo $this->Form->end('Submit'); ?> 

這應該爲你提供一個簡單的例子。提交表單,然後檢查元素以查看添加了錯誤類的位置。

你或許可以矇混過關:

.error input { border: red; } 

在CSS

+0

是的,這是一個聰明的解決方案...你能給我一個更完整的例子嗎? (用$ this-> Form-> input())以及我需要用作選項的參數?謝謝 – Dail

0

想想你的問題的邏輯:

「如果有錯誤我希望類的div爲x,否則爲y「。

有幾個方法可以做到這一點,如果你需要做的就是翻轉基於錯誤的類,然後FormHelper::isFieldError就足夠了......

<?php 
echo $this->Form->input('User.email', array(
     'label' => array(                  
      'class' => 'name-form', 
      'text' => 'Email:' 
     ),                
      'div' => 'field', 
      'class' => $this->Form->isFieldError('User.email') ? 'input-xlarge-error' : 'input-xlarge' 
)); 
?> 

以上不會停止「的形式-error「類被附加到輸入。 (對於這個問題的解決方案超出了問題的範圍)

我回答這個問題的原因是因爲我需要在我的輸入上專門設置錯誤類,以便以我想要的方式使用引導程序3。這也可以幫助輸入類在錯誤時被擦除。您可能還想查看下面鏈接的FormHelper::input()的可用選項。在過去的錯誤更復雜的控制,還有一個FormHelper::Error這是更強大,你可以找到所有這一切在CakePHP的網站....

http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html

1

你可以做的就是創建自己的表單助手類並覆蓋addClass()方法:

class BootstrapFormHelper extends FormHelper { 
    public function addClass($options = array(), $class = null, $key = 'class') { 
     if ($class === 'error') { 
      $class .= ' has-error'; 
     } 
     return parent::addClass($options, $class, $key); 
    } 
} 
+0

這種方法做到了! –

相關問題