0

次のように、ログイン用と登録用の2つのフォームを持つ1つのビューがあります:signup.ctp //myビュー

    <div>
     <?php 
       echo $this->Form->create("Tbluser"); 
       echo $this->Form->hidden('formsent', array('value' => 'signup'));
       echo $this->Form->input('username' ,array('label'=>'Username')); 
       echo $this->Form->input('password' ,array('label'=>'Password','type' => 'password')); 
       echo $this->Form->input('email' ,array('label'=>'Email'));
       echo $this->Form->end('Register');
     ?> 
    </div>

<div>
 <?php 
    echo $this->Form->create("Tbluser");  ?>
    echo $this->Form->hidden('formsent', array('value' => 'login')); 
    echo $this->Form->input('username' ,array('label'=>"Username :"));
    echo $this->Form->input('password' ,array('label'=>"Password :",'type' => 'password'));
    echo $this->Form->end('Login'); 
 ?>
<div>

私が両方のフォームに使用しているモデルは次のとおりです。

<?php
class Tbluser extends AppModel{

    public $validate = array(
        'username'=>array(
            array(
                'rule'=>'alphaNumeric',
                'allowEmpty'=>false,
                'message'=>'Invalide Username!'
            ),
            array(
                'rule' => array('minLength', '4'),
                'message' => 'Username has to be more than 3 chars'
            ),
            array(
                'rule'=>'isUnique',
                'message'=>'Username already taken!'
            )
        ),
        'password' => array(
                array(
                    'rule' => 'alphaNumeric',
                    'allowEmpty'=>false,
                    'message' => 'Password must be AlphaNumeric!'
                ),
                array(
                    'rule' => array('minLength', '4'),
                    'message' => 'Username has to be more that 3 chars'
                )
            ),
        'email'=>array(
            array(
                'rule'=>array('email',true),
                'required'=>true,
                'allowEmpty'=>false,
                'message'=>'Invalide email adress!'
            ),
            array(
                'rule'=>'isUnique',
                'message'=>'Mail adress already taken!'
            )
        )
    );
}
?>

私が使用しているコントローラーは次のとおりです。

<?php
class TblusersController extends AppController
{
    public $uses = array(
        'Tbluser'
    );

    public function signup()
    {
      if ($this->request->is('post')) {
            if ('signup' === $this->request->data['Tbluser']['formsent']) {
                         // Registration part.
                }else if('login' === $this->request->data['Tbluser']['formsent']){
                         //Login part
                }
    }
}
?>

私のAppControllerは次のようになります:

<?php
class AppController extends Controller {
    public $helpers = array('Form', 'Html');
    public $components = array('Session','Cookie','Auth'=>array(
        'authenticate'=>array(
             'Form' => array(
                'userModel' => 'Tblforumuser',
                'fields' => array(
                    'username' => 'username',
                    'password' => 'password'
                )
            )
        )
    ));
}
?>

現在、サインアップ フォームに間違ったデータを入力して送信すると、検証が行われますが、ログイン フォーム フィールドでも検証が行われるため、両方のフォームではなく、そのサインアップ フォームにのみ適用されるように検証を設定するにはどうすればよいですか? ありがとう。

4

1 に答える 1

0

モデルにすべての検証を制限なしで実行するように指示しているため、読み取りと書き込みのたびにすべての検証が呼び出されているようです。これを処理するより良い方法は、フォームごとに個別のモデルです。

を拡張する 2 つの新しいモデルuserLoginを作成することにより、フォームごとに特定の検証ルールを設定できます。次のようなことができます:userRegisterTbluser

View/Tbluser/signup.ctp

<div>
 <?php 
   echo $this->Form->create("userRegister"); 
   echo $this->Form->hidden('formsent', array('value' => 'signup'));
   echo $this->Form->input('username' ,array('label'=>'Username')); 
   echo $this->Form->input('password' ,array('label'=>'Password','type' => 'password')); 
   echo $this->Form->input('email' ,array('label'=>'Email'));
   echo $this->Form->end('Register');
 ?> 
</div>

<div>
 <?php 
    echo $this->Form->create("userLogin");  ?>
    echo $this->Form->hidden('formsent', array('value' => 'login')); 
    echo $this->Form->input('username' ,array('label'=>"Username :"));
    echo $this->Form->input('password' ,array('label'=>"Password :",'type' => 'password'));
    echo $this->Form->end('Login'); 
 ?>
<div>

ここでは、各$this->Form-create();ヘルパーで 2 つの別個のモデルを使用しているため、指定されたモデルの検証のみが実行されます。モデルには、割り当てられたフォームに適用される検証のみが含まれます。

モデル/userRegister.php

class userRegister extends Tbluser{
    public $validate = array(
        'username'=>array(
            array(
                'rule'=>'alphaNumeric',
                'allowEmpty'=>false,
                'message'=>'Invalide Username!'
            ),
            array(
                'rule' => array('minLength', '4'),
                'message' => 'Username has to be more than 3 chars'
            ),
            array(
                'rule'=>'isUnique',
                'message'=>'Username already taken!'
            )
        ),
        'password' => array(
                array(
                    'rule' => 'alphaNumeric',
                    'allowEmpty'=>false,
                    'message' => 'Password must be AlphaNumeric!'
                ),
                array(
                    'rule' => array('minLength', '4'),
                    'message' => 'Username has to be more that 3 chars'
                )
            ),
        'email'=>array(
            array(
                'rule'=>array('email',true),
                'required'=>true,
                'allowEmpty'=>false,
                'message'=>'Invalide email adress!'
            ),
            array(
                'rule'=>'isUnique',
                'message'=>'Mail adress already taken!'
            )
        )
    );
}

モデル/userLogin.php

class userLogin extends Tbluser{
    public $validate = array(
        'username'=>array(
            array(
                'rule'=>'alphaNumeric',
                'allowEmpty'=>false,
                'message'=>'Invalide Username!'
            ),
            array(
                'rule' => array('minLength', '4'),
                'message' => 'Username has to be more than 3 chars'
            ),
            array(
                'rule'=>'isUnique',
                'message'=>'Username already taken!'
            )
        ),
        'password' => array(
            array(
                'rule' => 'alphaNumeric',
                'allowEmpty'=>false,
                'message' => 'Password must be AlphaNumeric!'
            ),
            array(
                'rule' => array('minLength', '4'),
                'message' => 'Username has to be more that 3 chars'
            )
        )
    );
}

次に、signup();メソッドで、作成したばかりの 2 つの新しいモデルを適切にロードする必要があります。

コントローラー/TblusersController.php

class TblusersController extends AppController {
    public $uses = array(
        'Tblforumuser'
    );

    public function signup() {
      $this->loadModel('userLogin');
      $this->loadModel('userRegistration'); 
      if ($this->request->is('post')) {
            if ('signup' === $this->request->data['Tblforumuser']['formsent']) {
                         // Registration part.
                }else if('login' === $this->request->data['Tblforumuser']['formsent']){
                         //Login part
                }
    }
}

お役に立てれば

于 2013-05-14T04:47:05.033 に答える