【问题标题】:Is there a way to return both a redirection and response code at the end of a submission有没有办法在提交结束时同时返回重定向和响应代码
【发布时间】:2020-06-16 22:41:28
【问题描述】:

我不确定这是否是实现它的正确方法,但我的想法是使用响应代码重定向到成功(或不成功)提交。

假设在这种情况下,我们正在对现有博客文章进行更新。

首先,我们将检查记录是否存在?理想情况下,如果没有,我想留在当前页面(带有响应代码)。

$blogpost = Blogpost::find($id);
if(is_null($blogpost)){
    return response()->json(["message"=>"Record Not Found!"], 404);
}

其次,我会进行验证检查,看看是否一切正常。如果不正确,我们也希望保留在当前页面上(带有响应代码)。

$valid=['title' => 'required|min:3',
        'msg'=>'required|min:3',
];

$valida = Validator::make($request->all(), $valid);
if($valida->fails()){return response()->json($valida->errors(), 400);}

最后,当一切顺利时,我想要一个重定向(带有 200 响应代码)。

$blogpost->update($request->all());
return redirect('/blogposts')->with('success', 'Post Has Been Updated!');

但目标是同时使用响应代码进行重定向。 所以,我想做的是以下我认为不正确的事情。

return redirect('/blogposts')->with(response()->json($blogpost, 200));

希望有人能给我一些指导,谢谢!

【问题讨论】:

  • 重定向是一个通常带有代码 301 或 302 的响应

标签: laravel laravel-5 laravel-7


【解决方案1】:

我如何实现这个(尤其是 302)是这样的:

return response(json(["message"=>"Record Not Found!"]), 404);

仅当您通过 AJAX 请求访问 $this 控制器操作时才有意义。 进一步:

if($valida->fails()){return response(json($valida->errors()), 400);}

但是以您希望的方式使用 json 响应重定向是行不通的。这是您要重定向到的 URL(路由)。您可以使用?id=1 等捕获数据,从而产生“丑陋”的 URL。除非你的路由设置为Route::get('blogposts/id?')->...

return redirect()->to('/blogposts', 200)->with('id', $blogpost->id);

【讨论】:

  • 我的路由实际上设置为`Route::put('blogpost/{id}', 'BlogPostController@update'); ` 在这种情况下,以下方法会起作用吗? ` return redirect()->to('blogpost/{id}', 200); `
猜你喜欢
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多