0

メールアドレスが一意であること、メールアドレスがメールとしてフォーマットされていることなどを確認するユーザーモデルでいくつかの検証があります。

特にログインフォームについては、メールフィールドに適切なメールアドレスが入力されていることを確認したいのですが、一意のルールを起動したくありません。一意のルールに 'on' => 'create' を追加しようとしましたが、すべての検証が引き続き実行されます。

これは私のモデルにあるものです:

public $validate = array (
'email' => array(
'email' => array(
        'rule' => 'email',
        'required' => 'create',
        'allowEmpty' => 'false'
    ),
'isUnique' => array(
            'rule' => 'isUnique',
            'on' => 'create',
            'message' => 'This email address already exists in the     database. Would you like to login?'
      )
);

そして、これはコントローラのログイン機能にあります:

if ($this->User->validates(array('fieldList' => array('email', 'password')))) {
    // do login, redirect etc.
}

これが私の見解です

<?php echo $this->Form->create('User'); ?>
<fieldset>
    <legend><?php echo __('Please enter your email address and password'); ?></legend>
    <?php 
        echo $this->Form->input('email');
        echo $this->Form->input('password');
    ?>
</fieldset>
<?php echo $this->Form->end(__('Login')); ?>

ルールを「設定解除」することなく、特定の検証ルールが特定のアクションに対して起動されるべきではないことを CakePHP に認識させるにはどうすればよいですか。

また、ルールを設定解除しなければならなくなった場合、発火すべき場所で発火させるために再度設定する必要がありますか?それとも、設定解除はアクションの期間中のみ有効ですか?

ありがとう!

4

1 に答える 1

0

方法 1:

isUnique データを検証する前に、電子メールの検証を削除するだけです。

これらは、検証配列キーの設定を解除することによって検証を削除する可能な方法です。

$this->User->validator()->remove('email', 'isUnique');

(また)

$validator = $this->User->validator();
unset($validator['email']['isUnique']);

そして、ここでデータを検証します。

if ($this->User->validates(array('fieldList' => array('email', 'password')))) {
    // do login, redirect etc.
}

詳細については、こちらをチェックして検証を削除してください。

方法 2:

以下のように検証を行うこともできます。

User modelこのようにログインフォームを検証する関数を1つ作成するだけです

ユーザーモデル

public function loginValidate() {
    $validate1 = array (
        'email' => array(
            'rule' => 'email',
            'message' => 'please enter email.'
        ),
        'password' => array(
            'rule' => 'notEmpty',
            'message' => 'please enter password.'
        )
    );

    $this->validate = $validate1;
    return $this->validates();
}

ユーザーコントローラー

public function login() {
   if ($this->User->loginValidate()) {
      // do login, redirect etc.
   }
}

これがお役に立てば幸いです。

于 2013-09-17T04:49:45.180 に答える