请问是否有任何方法可以验证输入是否存在于列电子邮件或用户名中 无需处理代码,只需在laravel中验证系统即可
'username'=>'required|exists:App\Models\User,email OR exists:App\Models\User,username'
我想像wordpress一样输入“丢失的密码”
wordpress丢失密码系统要求用户提供电子邮件或用户名,如果退出则没问题,如果没有显示错误消息
答案 0 :(得分:1)
如果您确实需要检查username
是否以users.email
或users.username
的形式存在,则应制作一个Custom Validation Rule-因为exists
规则不能同时涵盖这两个方面。这样的事情应该起作用:
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
use App\Models\User;
class EmailOrUsername implements Rule
{
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
return User::where(function($q) use($value) {
$q->orWhere('email', $value)->orWhere('username', $value);
})->count() > 0;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'Sorry, your credentials do not match our records.';
}
}
当您需要使用它时,您可以这样做:
<?php
use App\Rules\EmailOrUsername;
$request->validate([
'username' => ['required', 'string', new EmailOrUsername],
]);