You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 23:48:00