首页 > 解决方案 > 验证失败后返回重定向()不起作用

问题描述

我有一个表单,用户可以在其中编辑分支的信息,一旦用户提交该表单,update() 方法就会检查提交数据的有效性,例如每个订阅者的描述必须是唯一的。虽然验证有效,但如果验证失败,它不会重定向到我想要的确切 url/页面。它保持相同的编辑形式。

这是我的 update() 方法的代码:

public function update(Request $request, $id)
{
    $description = $request->input('description');
    $message     = $request->input('message');
    $subscriber_id = auth()->user()->subscriber_id;

    $messages = [
        'description.unique' => 'Branch already exists!',
    ];

    $this->validate($request, [
        'description' => Rule::unique('branches')->where(function ($query) use($subscriber_id) {
            return $query->where('subscriber_id', $subscriber_id);
        })
    ], $messages);

    Branch::where('id', $id)->update([
        'description'   => $description,
        'message'       => $message,
    ]);

    return redirect('branches')->with('success', 'Branch info successfully updated!');
}

注意:编辑表单的 url 是/branch/edit/{id}我提交后要重定向的页面/branches

我的验证错了吗?我错过了什么?

谢谢!:)

标签: laravellaravel-validation

解决方案


根据laravel 文档,您可以使用 Validator 门面重定向到不同的路由

public function update(Request $request, $id)
{
    $description = $request->input('description');
    $message     = $request->input('message');
    $subscriber_id = auth()->user()->subscriber_id;

    $messages = [
        'description.unique' => 'Branch already exists!',
    ];

    $validator = Validator::make($request->all(), [
        'description' => Rule::unique('branches')->where(function ($query) use($subscriber_id) {
            return $query->where('subscriber_id', $subscriber_id);
        })
    ],
    $messages);

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

    Branch::where('id', $id)->update([
        'description'   => $description,
        'message'       => $message,
    ]);

    return redirect('branches')->with('success', 'Branch info successfully updated!');
}

确保在控制器文件的开头使用 Validator 外观use Validator;


推荐阅读