【问题标题】:How to set up custom error class using Form Helper of CakePHP 2.2.4?如何使用 CakePHP 2.2.4 的 Form Helper 设置自定义错误类?
【发布时间】:2013-01-02 18:10:16
【问题描述】:

我有一个“特殊”要求。几天前我开始使用 CakePHP 2.2.4,现在我正在使用 Form Helper 开发一些小型表单。

我看到表单助手自动管理错误(太棒了!),但我需要做一些自定义。我知道我可以更改错误的类别(错误消息)并使用例如span 而不是div

但是,如果出现错误,我需要更改输入的类。

<?php

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

?>

如您所见,我使用的类名为 input-xlarge

如果出现错误,我需要更改该类。新类应该是 input-xlarge-error。

这个类只改变输入文本的border设置为red

这可能吗?

谢谢!

【问题讨论】:

    标签: php cakephp cakephp-2.0


    【解决方案1】:

    如果出现错误,为什么需要更改输入的类?

    您可以使用附加到外部 div 的类来定位输入。

    例如

    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 中

    【讨论】:

    • 是的,这是一个聪明的解决方案……你能给我一个更完整的例子吗? (使用 $this->Form->input())和我需要用作选项的参数?谢谢
    • 如果您使用的是支持输入字段错误的css框架,并且您不想编辑css框架,则需要创建一个新的类名
    【解决方案2】:

    您可以做的是创建自己的 FormHelper 类并覆盖 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);
        }
    }
    

    【讨论】:

      【解决方案3】:

      想想你的问题的逻辑:

      “如果有错误,我希望 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'
      ));
      ?>
      

      以上内容不会阻止“form-error”类被附加到输入中。 (解决方案超出了问题的范围)

      我回答这个问题的原因是因为我需要在我的输入上专门设置错误类,以便按照我想要的方式使用 bootstrap 3。这也有助于输入类在错误时被擦除。您可能还想查看我在下面链接的FormHelper::input() 可用的选项。对于更复杂的错误控制,有一个更强大的FormHelper::Error,你可以在 cakephp 网站上找到这一切......

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-08
        • 1970-01-01
        • 1970-01-01
        • 2019-04-20
        • 1970-01-01
        相关资源
        最近更新 更多