Laravel 8 如何将foreach循环中的post id传递到举报表单页并获取数据
实现步骤
1. 调整路由定义
在routes/web.php中给举报路由添加post参数,支持接收传递的帖子ID:
// 替换原有无参数的report路由 Route::get('/report/{post}', [ReportController::class, 'showForm'])->name('report');
该写法默认开启Laravel路由模型绑定,会自动根据传入的ID查询对应帖子数据。
2. 修改列表页的举报链接
调整循环内的跳转链接,把当前遍历的帖子ID作为参数传入路由生成方法,同时修正代码里漏写$符号的小问题:
@foreach($items as $item) <div> ID : {{ $item->id }} </div> <div> Title : {{ $item->title }} </div> <div> <a href="{{ route('report', ['post' => $item->id]) }}">Report Post Form</a> </div> @endforeach
3. 控制器层处理数据查询
在对应的控制器方法中接收参数,同时关联查询帖子对应的用户详情:
<?php namespace App\Http\Controllers; use App\Models\Post; use Illuminate\Http\Request; class ReportController extends Controller { public function showForm(Post $post) { // 预加载关联用户数据,避免N+1查询问题 $post->load('user'); // 把数据传递给举报表单视图 return view('report.form', compact('post')); } }
如果不使用路由模型绑定,也可以手动查询:
public function showForm($postId) { $post = Post::with('user')->findOrFail($postId); return view('report.form', compact('post')); }
4. 举报表单页使用数据
在举报表单的Blade视图中直接调用$post对象的属性即可,提交举报时可以把帖子ID放入隐藏域随表单提交:
<!-- 显示帖子关联的用户信息示例 --> <div>被举报帖子作者:{{ $post->user->name }}</div> <div>被举报帖子标题:{{ $post->title }}</div> <form action="{{ route('report.submit') }}" method="post"> @csrf <!-- 隐藏域存储帖子ID,提交时传给后端 --> <input type="hidden" name="post_id" value="{{ $post->id }}"> <!-- 其他举报表单字段 --> <textarea name="reason" placeholder="请填写举报原因"></textarea> <button type="submit">提交举报</button> </form>
内容的提问来源于stack exchange,提问作者Rishav
相关产品推荐
相关产品推荐

