Cakephp验证后,所有表单字段都为空,表单错误

时间:2012-04-21 12:57:39

标签: forms validation cakephp post

我有问题..我尝试填写表单然后单击提交按钮然后它显示表单错误但所有这些文本框字段都空白,可以显示表单错误。我希望它在验证之前变成相同的值。就像我不想在验证后清除/清空值。

我做了这样的事情:(在视野中)

<div class="regform">
        <div id="formleft">First Name<asterix>*</asterix></div>
        <div id="formright"><?php echo $this->Form->input('First Name', array(
                'name' => 'firstname',
                'label'=> false
            )); ?></div>
        <div id="formerror"><?php echo $this->Form->error('Customer.firstname'); ?></div>
    </div>

(在模特中):

'firstname' => array(
                    'firstname_cant_be_empty' => array(
                            'rule' => 'notEmpty',
                            'message' => 'First Name must be filled.'
                        ),
                    'firstname_must_be_alphabet' => array(
                            'rule' => '/^[a-z]{3,}$/i',
                            'message' => 'First Name is only letters. No numbers, Dotted, etc.'
                        )
                )

(在控制器中):

if ($this->request->is('Post')) {

            if ($this->Customer->save($this->request->data) && $this->Customer->validates()) {
                //debug($this->request->data);
                $this->Session->setFlash('good!');
                //$this->redirect('/');
            } else {
                $this->Session->setFlash('Fill up form now!');
                $this->data = $this->request->data;
            }

        }

1 个答案:

答案 0 :(得分:9)

问题出在你看来:

    <div id="formright"><?php echo $this->Form->input('First Name', array(
            'name' => 'firstname',
            'label'=> false
        )); ?></div>

具体做法是:

$this->Form->input('First Name', array(

'name' => 'firstname',

这会导致生成的表单元素如下:

<input id="UserFirstname" type="text" maxlength="50" name="firstname">

您的表单输入应该是:

    echo $this->Form->input('firstname', array(
            'label'=> false
    ));

注意差异。这会导致表单元素生成为:

<input id="UserFirstname" type="text" maxlength="50" name="data[User][firstname]">

主要区别是name="data[User][firstname]"。这导致数据以熟悉的$ this-&gt; request-&gt;数据的数组格式发布,这也允许在表单错误时重新填充表单。