当前位置: 首页 > 知识库问答 >
问题:

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

夏侯自珍
2023-03-14

我是编程初学者,所以请原谅我对 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');
    }
}

< code>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的自定义验证器吗?

共有1个答案

顾俊楚
2023-03-14

RegisterControllervalidator() 方法必须始终返回 Illuminate\Contracts\Validation\Validator 类的实例,但你返回的是 lluminate\View\Viewelse 条件下,尝试将验证器更改为:

/**
 * 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!');
                }
            });
        }
    );
}
 类似资料:
  • 我正在尝试在我的注册控制器中注册多用户,并使用以下代码进行检查。但它告诉我一个错误: 方法App\Http\Controllers\Auth\RegisterController::validator不存在。

  • 打开UserModule, 将login方法修改为 @At @Filters // 覆盖UserModule类的@Filter设置,因为登陆可不能要求是个已经登陆的Session public Object login(@Param("username")String name, @Param("password")String password,

  • 本文向大家介绍pandas修改DataFrame列名的方法,包括了pandas修改DataFrame列名的方法的使用技巧和注意事项,需要的朋友参考一下 在做数据挖掘的时候,想改一个DataFrame的column名称,所以就查了一下,总结如下: 数据如下: 方法一:暴力方法 但是缺点是必须写三个,要不报错。 方法二:较好的方法 好处是可以随意改个数: 可以只改变'A','C',不改变'B'。 以上

  • 本文向大家介绍修改ThinkPHP缓存为Memcache的方法,包括了修改ThinkPHP缓存为Memcache的方法的使用技巧和注意事项,需要的朋友参考一下 一般来说,ThinkPHP的默认缓存方式是以File文件方式实现的,运行时会在/Runtime/Temp 下生成很多的缓存文件。 有的情况下服务器装了memcached之后,需要将ThinkPHP的缓存方式更改成memecache方式 具体

  • 本文向大家介绍elementui的默认样式修改方法,包括了elementui的默认样式修改方法的使用技巧和注意事项,需要的朋友参考一下 今天用element ui ,做了个消息提示,发现提示的位置总是在上面,如图: 可是我想让提示的位置到下面来,该怎么办? 最后还是看了官方的api 原来有个自定义样式属性 customClass 设置下就好了 js代码 css代码 效果图 以上这篇elementu

  • 我正在尝试重构旧的SimpleFormController。我想用实际的成功视图和表单视图字符串替换getSuccessView()和gerFormView()调用。 我尝试的另一种方法是直接操纵身体作为一个整体。 这和第一个还有同样的汽车进口问题。除此之外,它添加了冗余的花括号,例如 会变成 因为它是简单的替换,最简单的方法是如下所示 由于我可以在修改修饰符、注释、方法名、注释等方面避免使用sp