如何在注册验证器中为两个不同的表创建唯一列

时间:2019-05-15 06:30:44

标签: laravel

我正在创建两个不同的注册(针对管理员和用户)。但是验证器中的username-> unique仅适用于表用户。

protected function validator(array $data)
{
    return Validator::make($data, [
        'firstname' => ['required', 'string', 'max:255', 'min:3'],
        'middlename' => ['required', 'string', 'max:255', 'min:3'],
        'lastname' => ['required', 'string', 'max:255', 'min:3'],
        'username' => ['required', 'string', 'max:255', 'min:3', 'unique:users'],
        'password' => ['required', 'string', 'min:6', 'confirmed'],
    ]);
}

从users表中验证用于注册用户的唯一用户名,并从admins表中验证用于注册管理员的唯一用户名。

2 个答案:

答案 0 :(得分:0)

您可以使用route name中的current request或类似的东西来确定必须使用哪些规则。

protected function validator(array $data)
{
    $route = Request::route()->getName();

    $rules = [
        'firstname' => ['required', 'string', 'max:255', 'min:3'],
        'middlename' => ['required', 'string', 'max:255', 'min:3'],
        'lastname' => ['required', 'string', 'max:255', 'min:3'],
        'password' => ['required', 'string', 'min:6', 'confirmed'],
    ];

    // whatever your route name or identifier to differentiate between
    // user and admin registration may be.
    if ($route === 'registration.user') {
        $rules = $rules + [
            'username' => ['required', 'string', 'max:255', 'min:3', 'unique:users'],
        ];
    }

    return Validator::make($data, $rules);
}

答案 1 :(得分:0)

验证器仅应验证数据,将其与有关路线等的概念耦合在一起是很不好的。

我将创建一个自定义的Validator类,该类将以表名作为参数。

然后,您可以在控制器中使用正确的表参数实例化该验证器(它将知道路由,请求等...)

相关问题