【问题标题】:Cakephp After Validation, All form field went empty with form errorCakephp 验证后,所有表单字段都为空并出现表单错误
【发布时间】:2012-05-02 19:11:34
【问题描述】:

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

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

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

        }

【问题讨论】:

  • 我认为你不需要 $this->Customer->validates() 因为它已经在 save 方法中做到了。

标签: forms validation cakephp post


【解决方案1】:

问题在你看来:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多