我的表单验证有一个奇怪的问题。我的表单中有4个输入,它们都经过验证。
一切正常,直到它验证我的最后一个输入字段,即电子邮件输入字段。我在电子邮件输入字段'rule' => 'notEmpty'
,'rule' => 'email'
上设置了两个规则。表单只需要检查notEmpty规则就可以验证和发布,但如果找到无效的电子邮件,它确实会验证它,但即使输入了有效的电子邮件,它也不会发布。
以下是一些场景:
一:用户输入所有输入的有效条目
一切正常,表格帖子和数据都会添加到数据库中。
二:用户输入除电子邮件输入之外的所有输入的有效条目,但随后在所有输入中输入有效的电子邮件
假设用户在仅提供前三个字段的输入后点击提交
在第一次输入有效的电子邮件地址后,一切正常,表格帖子和数据被添加到数据库中。
三:用户输入除电子邮件之外的所有有效条目(提供无效的电子邮件)
它显示错误消息,但即使在提供有效的电子邮件地址后,它也不会执行任何操作。我注意到,如果您一直单击提交按钮,页面将继续使用相同的数据重新加载
此外,如果在初次点击后再次点击提交按钮,则错误信息会消失
这是我的模特:
class Member extends AppModel
{
public $validate = array(
'id' => array(
'rule' => 'notEmpty'
),
'Student_First_Name' => array(
'rule' => 'notEmpty'
),
'Student_Last_Name' => array(
'rule' => 'notEmpty'
),
'Student_Email' => array(
'emailRule-1' => array(
'rule' => 'notEmpty',
'last' => false
),
'emailRule-2' => array(
'rule' => 'email',
'message' => 'Please enter a valid email address.'
))
);
}
这是控制器:
class MembersController extends AppController
{
...
public function add()
{
if($this->request->is('post'))
{
$this->Member->create();
if($this->Member->save($this->request->data))
{
$this->Session->setFlash('Member has been added!');
$this->redirect( array( 'action' => 'members'));
}
else
{
$this->Session->setFlash('Unable to add member.');
}
}
}
}
我为这么简单/烦恼问题这么长的帖子道歉,但我讨厌在我的应用程序/网站上有这样的东西。
谢谢。
答案 0 :(得分:0)
您的表单很可能是另一种形式的帖子:put。
快速解释是:
POST is simulated by FormHelper for 'create' form, or any post form that isn't modifying an existing record.
PUT is for updating existing records.
请参阅http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#FormHelper::create
您的添加操作计为"创建"。
顺便说一句:蛋糕代码显示它实际上应该是一个POST(见下面的评论)。因此,在代码中的某个位置,您可以将帮助程序从POST更改为PUT。也许你正在做一些非传统的事情。
提示:如果您想要安全起见,请检查两者:
if ($this->request->is('post') || $this->request->is('put')) {}
确保两种帖子类型都有效。
还尝试坚持使用约定并使用lower_case_underscored字段名。最后但并非最不重要的是放弃" id"验证。验证主键是没有意义的。