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)
在 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)
当注册用户输入电子邮件时,系统会提醒用户使用小写字母。
它对我有用,我不确定这是否是一个好方法。