laravel验证检查电子邮件或用户中是否存在输入值

时间:2020-10-23 19:46:34

标签: laravel

请问是否有任何方法可以验证输入是否存在于列电子邮件或用户名中 无需处理代码,只需在laravel中验证系统即可

'username'=>'required|exists:App\Models\User,email OR exists:App\Models\User,username'

我想像wordpress一样输入“丢失的密码”

wordpress丢失密码系统要求用户提供电子邮件或用户名,如果退出则没问题,如果没有显示错误消息

1 个答案:

答案 0 :(得分:1)

如果您确实需要检查username是否以users.emailusers.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],
]);