1

在我的 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

4 回答 4

5

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

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

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

您还可以通过将表单本身的 autovalidate 属性传递为 false 来防止在浏览器中检查错误 - 请参阅禁用 HTML5 表单元素的验证

于 2013-02-06T10:10:25.830 回答
3

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

于 2013-03-24T20:22:53.337 回答
1

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

即使您从模型中添加 'required'=>false,它仍然可能无法正常工作。

我为使其正常工作所做的工作是在视图上,我添加了 'required'=>'false'

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

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

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

于 2013-05-13T04:45:03.497 回答
0

在 add_district.ctp 中写入

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

我认为这将解决您的问题。

于 2014-05-21T17:39:20.533 回答