在laravel验证失败和通过验证时如何在laravel验证中创建回调?

问题描述 投票:1回答:3

我的自定义请求文件中有一个验证。

class AuthRequest extends FormRequest
{
    public function store()
    {
        return $this->validate([
            'first_name' => ['required','min:2','max:30',new PersonNameRule],
            'last_name' => ['required','min:2','max:30',new PersonNameRule],
            'username' => ['required','confirmed',new UsernameRule]
        ]);
    }

    public function rules(){ return []; }
}

在我的控制器中,这是使用方法。

public function store(AuthRequest $request)
{
    $data = $request->store();

    return request()->all();
}

我的问题是如何在下面执行这些操作:

  • 验证失败时-创建会话/ session(['attempt' => session('attempt')+1 ?? 1]);
  • 通过验证时-销毁会话/ session()->forget('attempt')
php laravel laravel-validation
3个回答
1
投票

@mrhn是正确的,您没有填写函数内部的规则,因此FormRequest将始终返回false。相反,您宁愿创建自己的方法并使用$this->validate()

现在在文件.. \ Illuminate \ Validation \ Validator.php]中找到解决问题的方法,然后找到validate()函数,然后将您想要执行的会话放在下面,如下所示。

public function validate()
{
    if ($this->fails()) {
        session(['attempt' => session('attempt')+1 ?? 1]);
        throw new ValidationException($this);
    }else{
        session()->forget('attempt');
    }

    return $this->validated();
}

上述解决方案是全局的,这意味着它将在您每次使用$this->validate()时执行。


1
投票

您可以使用Validator实例而不是调用validate()


0
投票

首先,我将把您的验证转换为表单请求,当注入到控制器中时,它将自动解决。

© www.soinside.com 2019 - 2024. All rights reserved.