【问题标题】:Laravel redirect after updateLaravel 更新后重定向
【发布时间】:2017-02-18 23:00:38
【问题描述】:

我在一个名为 AssetController 的控制器中有一个更新操作。

在动作结束时我做return \Redirect::route('asset.edit', array($id));

在我的路线中,我有Route::resource('asset', 'AssetController');

当我发布到更新操作时,它会将我带到“/asset/8”(8 是该资产记录的 ID)。我希望它转到“/asset/8/edit”——换句话说,只需将用户返回到他们刚刚提交以供更新的编辑表单。

我也尝试了return \Redirect::back(),但它也发送到“/asset/8”——甚至认为他们刚刚提交的页面的 URL 是“/asset/8/edit”。

为什么这不起作用?

【问题讨论】:

    标签: laravel laravel-5 routes


    【解决方案1】:

    像这样注册你的吹捧:

    Route::resource('asset', 'AssetController', ['names' => [ 'edit' => 'asset.edit ]]);
    

    然后使用您的重定向:

    \Redirect::route('asset.edit', array($id));
    

    【讨论】:

    • 没必要——它工作得很好,就像在我的代码中一样。我的错误是重定向发生在 db:transaction() 函数内部。一旦我把它放在函数之外,它就可以在没有任何代码更改的情况下工作。
    【解决方案2】:

    你需要传递一个密钥

    return \Redirect::route('asset.edit', array('id' => $id));
    

    https://laravel.com/docs/5.4/responses#redirecting-named-routes

    【讨论】:

    • 谢谢,我希望你是对的,但这不会改变任何事情。 Laravel 解释作为 id 传递的单个参数。 (我试过你的建议只是为了确定,但不行。)
    【解决方案3】:

    我发现了问题。我的回报是在 DB::transaction() 中,因此它忽略了它。

    一旦我将原始返回语句放在 DB::transaction() 函数之外,它就可以正常工作。

    【讨论】:

      【解决方案4】:

      不要忘记添加元素输入:

      <input name="_method" type="hidden" value="PATCH">

      在您的编辑模板或编辑刀片上

      【讨论】:

      • 没必要。同样,一旦我从 DB:transaction() 中删除了 return 语句,它就会按预期工作。
      【解决方案5】:

      非常简单。只需使用这行代码:

      return redirect(route('asset.edit', array('id' => $id)));
      

      【讨论】:

        【解决方案6】:

        你应该使用

        return redirect("asset/".$id);
        

        或者

        return redirect()->route('asset.edit', compact('id'));
        

        或者

        return redirect()->route('asset.edit', ['id' => $id]);
        

        【讨论】:

          猜你喜欢
          • 2018-05-04
          • 1970-01-01
          • 2014-02-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-21
          • 2014-06-05
          • 1970-01-01
          相关资源
          最近更新 更多