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

Laravel中通过ID打开单篇文章页面的路由及方法问题求助

解决Laravel博客单页文章路由问题

别着急,咱们一步步拆解你遇到的问题并逐个解决:

  • 路由未定义错误:你在生成链接时错误地把路由名称和$about_us对象直接拼接,Laravel会把对象转换成JSON字符串,导致它去寻找一个不存在的路由(比如about.show{"id":1,"title":"My Agenda",...})
  • 空白页面:删除拼接后没给路由传递参数,同时控制器的show方法也没获取数据传递给视图,所以页面没有内容
  • index方法出现两个ID:应该是index方法返回了所有about_us记录,页面加载时拿到了多条数据的ID

1. 修正路由定义

你的路由缺少参数占位符,Laravel无法识别需要传递的文章ID。修改路由如下:

// web.php
Route::get('/about/{id}', 'App\Http\Controllers\AboutController@show')->name('about.show');

这里把/about.show改成/about/{id},{id}就是路由参数,用来接收文章ID,同时保留路由名称about.show不变。

2. 完善控制器的show方法

现在需要根据ID获取对应的文章数据,并传递给视图展示:

// AboutController.php
public function show($id) {
    // 根据ID查询对应的about_us记录(假设你的模型是AboutUs)
    $aboutUs = \App\Models\AboutUs::findOrFail($id);
    // 将数据传递给show视图
    return view('about.show', compact('aboutUs'));
}

findOrFail会在找不到对应ID的记录时返回404页面,比find更严谨,避免出现空数据的情况。

3. 修正Blade模板的链接生成

之前的链接写法错误,应该通过route函数的第二个参数传递路由参数,而不是拼接对象:

<a href="{{ route('about.show', $about_us->id) }}" class="text-success text-decoration-none">
    {{ $about_us->button }}
</a>

如果$about_us是完整的模型对象,Laravel会自动提取它的主键(默认是id),所以也可以直接传对象,写法更简洁:

<a href="{{ route('about.show', $about_us) }}" class="text-success text-decoration-none">
    {{ $about_us->button }}
</a>

这样修改后,点击链接就能跳转到对应ID的文章详情页,视图也能拿到对应的文章数据进行正常展示啦~

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:02:39