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 に答える