gpt4 book ai didi

laravel - laravel 5中auth中间件拦截的表单提交

转载 作者:行者123 更新时间:2023-12-05 05:13:42 31 4
gpt4 key购买 nike

我一直在从事 laravel 5.7 博客项目。我想评论一篇文章。

我需要实现这个:

  • 登录前,我可以在评论文本区输入任何内容
  • 我提交评论(当然会被auth中间件拦截)
  • 然后我被重定向到登录页面
  • 登录后,我希望我的应用程序能够自动提交以前的表单数据(或评论),而不是再次输入相同的评论
  • 我认为这是当今许多网站中非常普遍的业务逻辑,但我应该如何实现这一点?

我的评论 Controller 在这里:

public function __construct()
{
$this->middleware('auth');
}

public function store(Post $post) {
$comment = Comment::create([
'body' => session('comment')?:request('body'),
'post_id' => $post->id,
'user_id' => auth()->user()->id
//before logging in, you don't have an user_id yet.
]);
return back()->with('success', 'Add comment succeeded');
}

web.php 路由在这里:

Route::post('/posts/{post}/comments', 'CommentsController@store')->name('addComment');

基本上 auth 中间件拦截了我提交的表单数据,我想通过 auth 中间件处理我的表单数据。登录后不会丢失。

最佳答案

这是解决方案。有点棘手。在转到 auth 中间件之前,先将评论保存到 session 中。登录后,获取该路由以创建评论。路线:

Route::get('/posts/{post}/comments', 'CommentsController@store')->name('addComment');
Route::post('/posts/{post}/comments', 'CommentsController@commentSave');

评论 Controller :

public function __construct()
{
$this->middleware('auth', ['except' => ['commentSave']]);
}
public function commentSave(Request $request){
$url = \URL::previous();
session(['comment' => $request->input('body')]);
return redirect("$url/comments");
}

public function store(Post $post){
if(session('comment')){
$comment = Comment::create([
'body' => session('comment'),
'post_id' => $post->id,
'user_id' => auth()->user()->id
]);
session(['comment' => null]);
return redirect("posts/$post->id")->with('success', 'Add comment succeeded');
}
return redirect("posts/$post->id");
}

关于laravel - laravel 5中auth中间件拦截的表单提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53250146/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com