簡體   English   中英

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

[英]Laravel 6 - Modify the `validator` method of the `RegisterController`

我是編程初學者,所以請原諒我對 Laravel 驗證的誤解。

我正在嘗試為特定游戲的玩家創建一個網站,用戶可以在其中注冊。 當他們提交表單時,我必須驗證他們的帳戶是否存在。 為此,我有一個外部 api(來自游戲的 api),我可以用它來驗證他們的帳戶。

我試圖在我的RegisterController像這樣解決它:

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');
    }
}

isSummonerValid()所做的一切都是,它使用 API 並在用戶存在於游戲中時返回 true,否則返回 false。

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;
}

當 API 調用成功時,一切正常。 用戶已創建並可以登錄。

當 API 調用失敗(用戶不存在)時,我收到此錯誤:

方法 Illuminate\\View\\View::validate 不存在。

有人可以解釋我如何在 Laravel 中創建一個調用外部 API 的自定義驗證器嗎?

RegisterControllervalidator()方法必須始終返回Illuminate\\Contracts\\Validation\\Validator類的實例,但您在else條件下返回lluminate\\View\\View ,嘗試將validator更改為:

/**
 * Get a validator for an incoming registration request.
 *
 * @param  array  $data
 * @return \Illuminate\Contracts\Validation\Validator
 */
protected function validator(array $data)
{
    return tap(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'],
        ]),
        function ($validator) use ($data) {
            $validator->after(function ($validator) use ($data) {
                if (! $this->isSummonerValid($data['summonername'])) {
                    $validator->errors()->add('summonername', 'Something is wrong with this field!');
                }
            });
        }
    );
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM