cakephp中的表单验证问题

时间:2013-04-09 11:42:21

标签: cakephp cakephp-2.1

我的表单验证有一个奇怪的问题。我的表单中有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.');
            }
        }
    }
    }

我为这么简单/烦恼问题这么长的帖子道歉,但我讨厌在我的应用程序/网站上有这样的东西。

谢谢。

1 个答案:

答案 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"验证。验证主键是没有意义的。

相关问题