2

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

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

<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;
            }

        }
4

1 回答 1

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->request->data 发布,这也允许在表单错误时重新填充表单。

于 2012-04-21T19:01:40.457 回答