cakephp 表单验证成功类/消息

Posted

技术标签:

【中文标题】cakephp 表单验证成功类/消息【英文标题】:cakephp form validation success class/message 【发布时间】:2012-09-18 13:28:31 【问题描述】:

我正在使用带有默认模型验证的 cakephp。在错误蛋糕上,将“错误”类添加到我的容器 div 中。伟大的!但是,如果除了一个表单元素之外的所有内容都正确输入了怎么办?我想要正确的输入来接收“成功”类(也许是一条消息或图标告诉我的用户他们有多棒)。

这是我的表单创建代码:

echo $this->Form->create('User',
        array(
            'class' => 'form-horizontal',
            'inputDefaults' =>
            array(
                'format' => array('before', 'label', 'between', 'input', 'error', 'after'),
                'div' => array('class' => 'control-group'),
                'label' => array('class' => 'control-label'),
                'between' => 'div class="controls">',
                'after' => '/div>',
                'error' => array('attributes' => array('wrap' => 'span', 'class' => 'help-inline')),
                )
            )
        );

【问题讨论】:

【参考方案1】:

我最终做的是将/lib/Cake/View/HelperFormHelper.php 复制到/app/View/Helper/FormHelper.php。然后我在第 1028 行附近修改了 /app/View/Helper/FormHelper.php (在我的副本中,它是“输入”函数的结尾),使其看起来像这样:

1028:
    if ($this->_introspectModel($modelKey, 'validates', $fieldKey)) 
         $divOptions = $this->addClass($divOptions, 'required');
    
    if($this->request->is('post')) 
        if(!$this->isFieldError($modelKey.'.'.$fieldKey)) 
        // This is the important line.
        $divOptions = $this->addClass($divOptions, 'success');
        
    
    if (!isset($divOptions['tag'])) 
        $divOptions['tag'] = 'div';
    
//end input function

【讨论】:

【参考方案2】:

不知道这是否是最干净的方法,但它会起作用。

我会将以下几行添加到我的视图中,检查请求是否为 POST。所有具有“控制组”类的字段都将采用新样式。

if($this->request->is('post'))
    echo '<style type="text/css">div.control-group  background-color:#000; </style>';

由于您不想在使用类 'error' 的字段中显示新样式,只需将 !important 放在 CSS 文件中的样式规则之后即可撤消更改。

示例'style.css':

error 
    background-color: none !important;

【讨论】:

谢谢 Leandro,这行得通,但我想知道是否有任何方法可以在不修改任何 CSS 的情况下实现类似的效果,因为我之前没有提到,我使用的是 Twitter Bootstrap。将“成功”类添加到我的控制组 div 确实会产生绿色输入元素的预期结果,但样式会覆盖也应用于不正确元素的“错误”类。..

以上是关于cakephp 表单验证成功类/消息的主要内容,如果未能解决你的问题,请参考以下文章

cakephp : 使用 $validate 数组验证登录表单

CakePHP 不检查表单验证

CakePHP 2.2.1 - 在表单上显示 CakePHP 错误 - 自定义验证

CakePHP 表单验证使用其他模型来验证和/或保存?

在联系表单 7 上隐藏验证错误或成功消息框

CakePHP ajax 表单更新复制页面