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

时间:2013-02-04 11:35:38

标签: error-handling cakephp-2.0

在我的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());     
            }
        }

4 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

即使您从模型中添加'required'=&gt; false,它仍然可能无效。

我所做的工作是在View上,我添加了'required'=&gt;'false'

e.g。我有一个用户视图和一个add.ctp

echo $this->Form->input('fname', array('label' => 'First Name','required'=>'false'));
之后,一切都成功了。但是我必须在所有输入字段上进行,以便蛋糕验证起作用。

答案 3 :(得分:0)

在add_district.ctp中写

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

我认为这可以解决您的问题。