0

私のユーザーモデル:

class User extends AppModel {
    public $validate = array(
        'username' => 'alphaNumeric',
        'password' => 'notempty',
        'confirmpassword' => 'notempty',
        'group_id' => 'notempty',
        'email' => array( 
              'rule' => 'email', 
              'message' => 'Please provide a valid email address.' 
         ),
    );
}

私のユーザー登録ビュー:

<div class="users form">
        <?php echo $this->Form->create('User'); ?>
    <fieldset>
        <legend><?php echo __('Register User'); ?></legend>
                <?php
                        echo $this->Form->input('User.username');
                        echo $this->Form->input('User.password');
                        echo $this->Form->input('User.confirmpassword', array('type'=>'password', 'label'=>'Confirm password'));
                        echo $this->Form->input('User.group_id');
                        echo $this->Form->input('User.email');
                ?>
        </fieldset>
        <?php echo $this->Form->end(__('Submit')); ?>
</div>

コントローラーでの私のユーザー登録アクション:

public function register() {
            if ($this->request->is('post')) {
                    ...
                    //create mail for verification
                    $email = new CakeEmail();
                    ...
                    $email->to($this->data['User']['email']);
                    $email->send($ms);
            }
}

/users/register にアクセスして、電子メール フィールドに「asdfgh」などを入力すると、デフォルトの CakePHP エラー メッセージが表示されます。

Invalid email: asdfgh
Error: An Internal Error Has Occurred.

電子メール フィールドの上のエラー メッセージの代わりに、次のように伝えます。

Please provide a valid email address.

私の質問: ユーザーの入力データが無効な場合、コントローラーでアクションを本当に呼び出す必要がありますか? ユーザーの入力データが有効な場合にのみ、コントローラーでアクションを呼び出す方法はありますか?

4

1 に答える 1

0

私は私の答えを見つけました!^^

実際には、検証は「save()」メソッドの前にのみ行われ、コントローラーでのアクション呼び出しの前には行われません。ただし、次を使用して、コントローラーでユーザー入力を検証できます。

if ( $this->User->validates() )

コントローラーでのユーザー登録アクションの再定式化:

public function register() {
            if ($this->request->is('post')) {
                    $this->User->set( $this->data );

                    if ( $this->User->validates() ) {
                            ...
                            //create mail for verification
                            $email = new CakeEmail();
                            ...
                            $email->to($this->data['User']['email']);
                            $email->send($ms);
                    }
            }
}
于 2012-11-29T15:45:04.867 に答える