Cakephp After Validation, All form field went empt

2019-07-20 20:28发布

问题:

I have problem.. I tried fill up form then click submit button then it show form error but all of them textbox field went blank empty with can show form error. I want it become same value from before validate. like i dont want to clear/empty out value after validation.

i did something like this: (in view)

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

(in model):

'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.'
                        )
                )

(in controller):

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:

The problem is in your view:

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

Specifically:

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

and

'name' => 'firstname',

This causes to be the form element to be generated like:

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

Your form input should instead be this:

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

Note the differences. This causes the form element to be generated as:

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

The main difference is name="data[User][firstname]". This causes the data to be posted in the familiar array format of $this->request->data, which also allows the form to be repopulated upon form errors.