我是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');
?>
我见过的验证错误不是我在控制器中提到的消息。
答案 0 :(得分:16)
这是内置的浏览器验证。
从2.3开始,HTML5 required属性也将根据验证规则添加到输入中。
您的title
有notEmpty
规则,因此Cake正在输出
<input type="text" required="required" ..
并且您的浏览器正在触发该消息。
编辑:要覆盖此行为,您可以执行以下操作:
$this->Form->input('title', array('required'=>false));
或
$this->Form->submit('Submit', array('formnovalidate' => true));
提交表单时,您的模型验证将会触发。
答案 1 :(得分:0)
从你的代码中我可以看到你没有包括帮助者。
public $helpers = array('Html', 'Form', 'Session');
public $components = array('Session');
只需添加到您的控制器并尝试..
答案 2 :(得分: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');
?>
如果表单助手不知道它正在为哪个'模型'创建表单,我将不会在正确的位置检查字段验证,因此,它不会输出'title'的验证错误< / p> 上面的[更新]解决方案并没有解决问题。 OP修改了问题
一些想法:
请务必启用'debug'(App / Config / core.php set Configure::write('debug', 2);
否则CakePHP可能正在使用您模型的'缓存'版本。
如果您错误地命名了模型,Cake可能会自动为您生成模型,在这种情况下,您的拥有模型永远不会被实际使用,请尝试进行调试以查看是否我们甚至“得到”你的模特:
将此添加到您的模型中;
public function beforeValidate($options = array())
{
debug($this->data); exit();
}