3

我是 cakePHP 的新手,我按照一些教程制作了一个简单的表单。在这个 html 表单上,我使用了验证。现在的问题是验证正在工作,但消息没有显示我希望它显示的内容。我尝试了下面的代码。

模型

 public $validate = array(
        'title' => array(
            'title_required' => array(
                'rule' => 'notEmpty',
                'message' => 'This is required field'
            ),
            'title_unique' => array(
                'rule' => 'isUnique',
                'message' => 'This should be unique title'
            )
        )
    );

控制器

public function add() {
        if ($this->request->data) {
            if ($this->Post->save($this->request->data)) {
                $this->Session->setFlash('Post has been added successfully');
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash('Error occured, Please try agan later!');
            }
        }
    }

看法

<h2>Add New Post</h2>
<?php
echo $this->Form->create('Post', array('action'=>'add'));
echo $this->Form->input('title');
echo $this->Form->input('body');
echo $this->Form->end('Create Post');
?>

我看到的验证错误不是我在控制器中提到的消息。

在此处输入图像描述

4

3 回答 3

16

那是内置的浏览器验证。

从 2.3 开始,HTML5 required 属性也将根据验证规则添加到输入中。

titlenotEmpty规则,所以蛋糕正在输出

<input type="text" required="required" ..

并且您的浏览器正在触发该消息。

编辑:要覆盖此行为,您可以执行以下操作:

$this->Form->input('title', array('required'=>false));

或者

$this->Form->submit('Submit', array('formnovalidate' => true));

当您提交表单时,您的模型验证将触发。

于 2013-02-06T10:52:44.560 回答
0

从您的代码中,我可以看到您没有包含助手。

public $helpers = array('Html', 'Form', 'Session');
public $components = array('Session');

只需添加到您的控制器并尝试..

于 2013-02-06T07:29:18.277 回答
0

您的Form-create()选项无效,第一个参数是模型名称,第二个是选项:

<h2>Add New Post</h2>
<?php
     echo $this->Form->create('Post', array('action'=>'add'));
     echo $this->Form->input('title');
     echo $this->Form->input('body');
     echo $this->Form->end('Create Post');
?>

如果表单助手不知道它正在为哪个“模型”创建表单,我不会在正确的位置检查字段验证,因此,它不会输出“标题”的验证错误

[更新]上面的解决方案没有解决问题。OP修改了问题

一些想法:

  1. 确保启用“调试”(App/Config/core.php 设置Configure::write('debug', 2);否则 CakePHP 可能正在使用您模型的“缓存”版本。

  2. 如果你的模型命名不正确,Cake 可能会自动为你生成一个模型,在这种情况下你自己的模型从未真正使用过,试试这个进行调试,看看我们是否“获取”到你的模型:

将此添加到您的模型中;

public function beforeValidate($options = array())
{
     debug($this->data); exit();
}
于 2013-02-06T07:30:31.427 回答