Laravel 6 - 修改`RegisterController`的`validator`方法

8 浏览
0 Comments

Laravel 6 - 修改`RegisterController`的`validator`方法

我是一个编程初学者,请原谅我对Laravel中验证的误解。\n我正在尝试为特定游戏的玩家创建一个网站,用户可以在网站上注册。当用户提交表单时,我需要验证他们的账户是否存在。为了做到这一点,我有一个外部API(游戏的API),我可以使用它来验证他们的账户。\n我尝试在我的RegisterController中这样解决它:\n

protected function validator(array $data)
{
    $validation = $this->isSummonerValid($data['summonername']);
    if ($validation) {
        return Validator::make($data, [
            'summonername' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'region' => ['required', 'string'],
            'rank' => ['required', 'string'],
            'lane' => ['required', 'array'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    } else {
        return view('auth.register');
    }
}

\nisSummonerValid()所做的一切就是使用API并返回true(如果用户在游戏中存在)或false(如果用户不存在)。\n

protected function isSummonerValid($summonerName)
{
    $client = new Client();
    try {
        $response = $client->request('GET',
            'https://euw1.api.riotgames.com/lol/summoner/v4/summoners/by-name/' . $summonerName .
            '?api_key=' . APIKEY);
    } catch (ClientException $e) {
        return false;
    }
    return true;
}

\n当API调用成功时,一切都正常。用户被创建并能够登录。\n当API调用失败(用户不存在)时,我收到以下错误信息:\n

\nMethod Illuminate\\View\\View::validate 不存在。\n

\n有人能解释一下我如何在Laravel中创建一个调用外部API的自定义验证器吗?

0
0 Comments

问题的原因是validator()方法必须返回Illuminate\Contracts\Validation\Validator类的实例,但是在else条件中返回了lluminate\View\View。解决方法是将validator方法修改为上述提供的代码。

0