还有很多类似的问题,但没有一个真正帮助我。 HTML5表单验证似乎是触发了“请填写此字段”而不是的模型验证消息,应该是“请输入模型”
我有一个表单可以将计算机添加到数据库中。
这是我的表格:
echo $this->Form->create('Computer');
echo $this->Form->input('Computer.model', array('label' => 'Model'));
echo $this->Form->input('Computer.memory', array('label' => 'memory'));
echo $this->Form->input('Computer.hdd', array('label' => 'hdd'));
echo $this->Form->input('Computer.price', array('label' => 'price'));
echo $this->Form->end('Save Computer');
以下是包含索引和添加操作的完整控制器代码
<?php
class ComputersController extends AppController {
public $helpers = array('Html', 'Form', 'Session');
public $components = array('Session');
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('add');
}
public function index() {
$this->set('computers', $this->Computer->find('all'));
}
public function add() {
if ($this->request->is('post')) {
if (!empty($this->request->data)) {
$this->Computer->save($this->request->data);
$this->Session->setFlash(__('Your Computer has been saved, or so it seems.....'));
return $this->redirect(array('action' => 'index'));
}
$this->Session->setFlash(__('Not sure why we got here 1.'));
} else {
$this->Session->setFlash(__('By right, this should be the index page'));
}
}
}
?>
这是模型
<?php
class Computer extends AppModel {
public $validate = array(
'model' => array(
'Please enter model name'=> array(
'rule'=>'notEmpty',
'message'=>'Please enter model'
)
)
);
}
?>
我从触发模型保存功能的其他表单中读取,我会自动触发模型验证。如何让模型验证起作用?
由于 凯文
答案 0 :(得分:1)
正如您所说,如果您在模型中进行notEmpty
验证,CakePHP会在输入属性上添加required="required"
。这是由浏览器处理的,因此当您尝试提交空值时,您会看到默认的Please enter this field
消息。一个优点是,如果您使用其他语言的浏览器,该消息将以该语言显示。
如果您想更改该消息,可以尝试类似this question中的解决方案。 (这可能不是你想要的)
如果要删除该客户端消息,可以使用novalidate
echo $this->Form->create('Computer', array('novalidate' => 'novalidate'));
这样,HTML5 required属性将被忽略,您将从模型中获取消息。
我不确定是否有办法告诉Cake在客户端使用服务器端值。
答案 1 :(得分:0)
$this->{Model}->save()
将返回false,但在您保存函数后,您将使用flash消息重定向。所以首先检查表单是否完美保存,如果完全保存然后重定向到列表页面,则另外明智地呈现您的view
文件,其中包含一条flash消息,您可以在其中查看验证消息。
if ($this->Computer->save($this->request->data)) {
$this->Session->setFlash(__('Your Computer has been saved, or so it seems.....'));
return $this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('Unable to save form'));
}
注意:要禁用html验证,请执行
$this->Form->inputDefaults(array(
'required' => false
));
视图文件中的
希望这会对你有所帮助。
答案 2 :(得分:0)
设置'novalidate'=&gt;在FormHelper :: create()
的选项中为trueecho $ this-&gt; Form-&gt; create('Computer',array('novalidate'=&gt; true));
有关详情,请转至http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html