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

时间:2019-11-08 16:18:41

标签: php laravel

我正在使用Laravel 6。 我创建了一个表单来插入会议,并在控制器中创建了一个validate方法来检查在db中插入的数据是否正确。 不幸的是,当validate方法失败时,默认的向后重定向会删除用户已编译的每个字段。

我尝试了很多次,但是在失败的情况下我无法理解如何使用用户填写的先前值进行重定向。

控制器:

    {

        $this->validate($request, [
            'participants' => [ 'required', new CheckParticipant() ], 
            'description' => 'required',
            'room' => [ 'required', new CheckRoom() ],
            'date_meeting' => [ 'required', new CheckDateTime() ],
            'start' => [ 'required', new CheckTime() ],
            'end' => 'required',
        ]);

        $meeting = new Meeting();

        $participants = request('participants');
        $meeting->id_participants = implode(';', $participants);

        $meeting->description = request('description');
        $meeting->id_room = request('room');
        $meeting->date = request('date_meeting');
        $meeting->start_hour = request('start');
        $meeting->end_hour = request('end');

        $meeting->save();

        $message_correct = "The meeting has been correctly inserted!";

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

    }

最后,如果用户填写了会议的参与者名称,但验证方法失败,则我希望在默认重定向回之后,该参与者已出现在下拉菜单中。 有人可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

在您看来,您可以使用old函数来检索上一个请求中刷新的数据。

答案 1 :(得分:2)

代替调用$this->validate,请尝试以下操作:

$validator = Validator::make($request->all(), [
    'participants' => [ 'required', new CheckParticipant() ], 
    'description' => 'required',
    'room' => [ 'required', new CheckRoom() ],
    'date_meeting' => [ 'required', new CheckDateTime() ],
    'start' => [ 'required', new CheckTime() ],
    'end' => 'required',
]);

if($validator->fails()) {
    return redirect('your/url')
    ->withErrors($validator)
    ->withInput();
}

然后,在您看来,您可以使用old('yourValue')访问旧输入。