Laravel 验证方法失败后如何重定向

How to redirect after validate method fails in Laravel

我正在使用 Laravel 6,我创建了一个表单来将新用户插入到我的数据库中。如果验证器失败,我想更改重定向方法的路由。我尝试了很多次,但总是在验证器失败时,我在当前视图 (adminArea.blade.php) 而不是主视图 (home.blade.php) 中看到错误。

public function insert_user(Request $request)
{
    $this->validate($request, [
        'name' => 'required',
        'surname' => 'required',
        'email' => 'required|email|unique:users',
        'pwd' => 'required',
        'permission' => 'required',
    ]);

    if ($validator->fails()) {
        return redirect()->route('home')->withErrors($validator);
    }

    $user = new User();
    $user->name = request('name');
    $user->surname = request('surname');
    $user->email = request('email');
    $user->password = Hash::make(request('pwd'));
    $user->permission = request('permission');
    $user->save();

    $message_correct = request('name')." ".request('surname')." has been correctly inserted!";

    return redirect()->route('home')->with('success', $message_correct);
}

目前,表单提交正常,并正确重定向到主页视图。但是,如果提交失败,它会保留在同一页面上 (adminArea.blade.php)。如果提交失败,有没有办法重定向主页视图中的错误?

正如我在你的验证中看到的那样,你正在使用 Illuminate\Foundation\Validation\ValidatesRequests@validate 方法来验证你的数据,这样你应该使用 try catch 块来捕获 ValidationException验证失败。

我建议你使用Validator,所以你的方法如下:

use Illuminate\Support\Facades\Validator

public function insert_user(Request $request)
    {
        $validator = Validator::make($request, [
            'name' => 'required',
            'surname' => 'required',
            'email' => 'required|email|unique:users',
            'pwd' => 'required',
            'permission' => 'required',
        ]);

        if($validator->fails()) {
            return redirect()->route('home')->withErrors($validator);
        }
        $user = new User();
        $user->name = request('name');
        $user->surname = request('surname');
        $user->email = request('email');
        $user->password = Hash::make(request('pwd'));
        $user->permission = request('permission');
        $user->save();
        $message_correct = request('name') . " " . request('surname') . " has been correctly inserted!";   
        return redirect()->route('home')->with('success', $message_correct); 
    }