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

方法一:

只需在验证数据之前删除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.
}

有关更多信息,您可以在此处查看以删除验证。

方法二:

您也可以进行如下验证。

只需创建一个函数User model来验证这样的登录表单

用户模型

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