![](/img/trans.png)
[英]How to make RegisterController's create method generate a Profile entry in Laravel 5
[英]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 的自定义验证器吗?
RegisterController
的validator()
方法必须始终返回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.