【问题标题】:Can't change default error messages in CakePHP 2.3无法更改 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', .....);

标签: error-handling cakephp-2.0


【解决方案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));?>
        

        我想这会解决你的问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-06-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-30
          • 2012-01-24
          • 1970-01-01
          相关资源
          最近更新 更多