Yii2-具有自定义功能的独特电子邮件
在规则方法中,我有以下电子邮件规则:Yii2-具有自定义功能的独特电子邮件,yii,yii2,Yii,Yii2,在规则方法中,我有以下电子邮件规则: ['email', 'uniqueEmail'], ['email', 'email'], 和UniqueMail方法: public function uniqueEmail($attribute, $email) { $user = static::findOne(['email' => Yii::$app->encrypter->encrypt($email)]); if (count($us
['email', 'uniqueEmail'],
['email', 'email'],
和UniqueMail方法:
public function uniqueEmail($attribute, $email)
{
$user = static::findOne(['email' => Yii::$app->encrypter->encrypt($email)]);
if (count($user) > 0)
$this->addError($attribute, 'This email is already in use".');
}
电子邮件验证正在工作,但UniqueMail不工作。我怎样才能做到这一点呢?为什么您认为
$email
中包含该值?如文档所述,第二个函数param实际上是参数数组,在验证器声明末尾提供(['email','uniqueemail','param1'=>'value1','param2','value2'])
试试这个:
public function uniqueEmail($attribute) {
$user = static::findOne(['email' => Yii::$app->encrypter->encrypt($this->{$attribute})]);
if ($user) { // dont use count($user) - if it's there, it's a single object, you want to check if it's not null!
$this->addError($attribute, 'This email is already in use".');
}
}
在Yii2
中,可以将即席验证声明为匿名函数:
['email', function($attribute) {
$user = static::findOne(['email' => Yii::$app->encrypter->encrypt($this->{$attribute})]);
if ($user) {
$this->addError($attribute, 'This email is already in use".');
}
}],
['email', 'email'],
尝试了您的代码(第二种方法),但验证仍然不起作用:/@Sasha请告诉我“不起作用”是什么意思。在该表中,您是否有一条记录,其中包含值与您查找的加密电子邮件相同的
email
字段?如果您有任何错误,是否可以进行var\u转储($user);在验证器中退出
?我刚刚解决了一个明显的问题,我猜不出你的数据库是如何建模的,也猜不出你的应用程序是如何工作的。我必须纠正我自己-js部分不起作用(现场验证,不发布表单),但一旦表单发布,验证就起作用了。只有在提交表单时才运行定义验证!这就是它所做的-它验证提交的表单。您不应该期望它在未提交任何内容的情况下运行。如果您想要客户端验证,您必须阅读本文: