无法更改 CakePHP 2.3 中的默认错误消息

Posted

技术标签:

【中文标题】无法更改 CakePHP 2.3 中的默认错误消息【英文标题】:Can't change default error messages in CakePHP 2.3 【发布时间】:2013-01-19 02:32:07 【问题描述】:

在我的 Cakephp 项目中,我想显示错误消息,但它不起作用。

当我提交时,我希望它显示一条错误消息,例如:“此字段为必填项”,但默认显示“请填写此字段”。我改变了消息,但它并没有从核心改变。

我的视图、模型和控制器代码如下:

add_district.ctp:

        <div class="pg_title txtLeft">Add District</div>

               <?php echo $this->Form->create('Admins', array('action' => 'add_district'));?>
                <table>
                    <tbody>

                        <tr>
                            <td><label>District Name<span class="red required">*</span></label></td>
                            <td><?php echo $this->Form->input('District.district_name',array('label'=>false,'div'=>false,'size'=>50,'style'=>'width:330px;')); ?></td>
                        </tr>

                        <tr>
                            <td colspan="2" align="right" style="padding-right: 113px;"><input type="reset" value="Reset"> | <?php echo $this->Form->submit('ADD', array('div' => false));?></td>
                        </tr>
                    </tbody>
                </table>  
            <?php print $this->Form->end();?>   

<div class="clear"></div>

型号:District.php

<?php
App::uses('AppModel', 'Model');
/**
 * Admin Login Model
 *
 */
 class District extends AppModel
 
    public $name='District';
    public $usetables='districts';

     public $validate = array(
     'district_name' => array(
                     'rule' => 'notEmpty',
                     'allowEmpty' => false,
                     'message' => 'This field is required'));

 
?>

而我的控制器代码是 (AdminController.php):

public function add_district()
        

            $this->layout='common';
            $this->District->create();
            $this->District->set($this->data);
          if(empty($this->data) == false)
            
                    if($this->District->save($this->data))
                    
                        $this->Session->setFlash('District Added Successfully.');
                        $this->redirect('add_district');
                    

            
            else
            
                $this->set('errors', $this->District->invalidFields());     
            
        

【问题讨论】:

这可能与您的问题没有直接关系,但是您为您的Form指定了错误的模型; echo $this-&gt;Form('Admins', .....); 应该是 echo $this-&gt;Form('District', .....); 【参考方案1】:

“请填写此字段”的消息来自浏览器本身,而不是来自 CakePHP。

所以 Firefox 和 Chrome(可能还有其他浏览器?)会自动检查标记为必填的字段,然后当您提交表单时,甚至在将该表单数据发送到服务器之前,如果未填写必填字段,浏览器会给你默认的弹出消息:“请填写此字段”。

这是浏览器的默认行为,与您的代码无关。如果您想检查您的 Cake 错误消息是否正常,请在 Safari 中尝试(从 6.0.2 版开始,它似乎没有“自动检测必填字段”功能)。在 Safari 中,您应该得到您自己的 CakePHP 错误消息。

您还可以通过将表单本身的 autovalidate 属性传递为 false 来防止在浏览器中检查错误 - 请参阅 Disable validation of html5 form elements

【讨论】:

【参考方案2】:

实际上 CakePHP 是通过 FormHelper 添加 HTML5 required="required" 属性来触发的。以前的 CakePHP 版本没有这样做。如果您愿意,可以通过将 'required' =&gt; false 添加到表单输入属性数组来防止这种情况发生。

【讨论】:

【参考方案3】:

问题在于浏览器验证。 至少在 Chrome 上,如果输入字段设置为“必填”,您会感到沮丧。它在 Safari 上似乎没有问题。

即使您从模型中添加 'required'=>false,它仍然可能不起作用。

我所做的是在 View 上运行,我添加了 'required'=>'false'

例如我有一个用户视图和一个 add.ctp

echo $this->Form->input('fname', array('label' => 'First Name','required'=>'false'));

在那之后,一切都解决了。但是我必须在所有输入字段上都这样做才能使蛋糕验证起作用。

【讨论】:

【参考方案4】:

在 add_district.ctp 中写入

<?php echo $this->Form->create('Admins', array('action' => 'add_district', 'novalidate' => true));?>

我想这会解决你的问题。

【讨论】:

以上是关于无法更改 CakePHP 2.3 中的默认错误消息的主要内容,如果未能解决你的问题,请参考以下文章

更改Shiny中的默认错误消息

更改struts 2上传文件的默认错误消息

Cakephp 2.2.3 habtm 保存到中间表

如何在Rails 5中更改设计中的验证错误消息

jQuery 验证:更改默认错误消息

CakePHP 中的 Ajax 错误处理