Laravel 独特的电子邮件验证不适用于 mongodb 中的不同字符大小写

Sar*_* TS 4 php laravel-5 laravel-5.5

我有一个带有唯一电子邮件验证的注册表。当我输入不同的字符大小写时,电子邮件不会应用唯一验证。

example@gmail.com, Example@gmail.com, eXample@gmail.com: Laravel 唯一验证失败。

example@gmail.com, example@gmail.com, example@gmail.com: Laravel 唯一验证是成功的。

请检查我下面的代码并纠正我。电子邮件在数据库中以小写形式存储。

DB-Mongodb,

框架 - Laravel 5.5

jenssegers/laravel-mongodb 用于连接 laravel 和 mongodb

注册控制器.php

protected function validator(array $data)
{
  return Validator::make($data, [
     'firstName' => 'required|string|max:255',
     'lastName' => 'required|string|max:255',
     'email' => 'required|string|email|max:255|unique:user,usrEmail',
     'password' => 'required|string|min:6|confirmed',
  ]);
}
Run Code Online (Sandbox Code Playgroud)

User.php(模型)

public function setusrEmailAttribute($value)
{
  $this->attributes['usrEmail'] = strtolower($value);
}
Run Code Online (Sandbox Code Playgroud)

Sar*_* TS 5

在 laravel 自定义验证规则的帮助下,我解决了这个问题。

我使用 php artisan 命令创建了一个新规则php artisan make:rule Lowercase并定义了该规则。

应用程序/规则/小写.php

public function passes($attribute, $value)
{
 return strtolower($value) === $value;
}

public function message()
{
    return 'The :attribute must be lowercase.';
}
Run Code Online (Sandbox Code Playgroud)

我已将规则对象与其他规则附加在一起

注册控制器.php

use App\Rules\Lowercase;
protected function validator(array $data)
{
        return Validator::make($data, [
            'firstName' => 'required|string|max:255',
            'lastName' => 'required|string|max:255',
            'email' => [ 'required', 'string', 'email', 'max:255', 'unique:user,usrEmail', new Lowercase ],
            'password' => 'required|string|min:6|confirmed',
            'dataProtection' => 'required',
            'termsService' => 'required',
        ]);
}
Run Code Online (Sandbox Code Playgroud)

当注册用户输入电子邮件时,系统会提醒用户使用小写字母。

它对我有用,我不确定这是否是一个好方法。