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
相关产品推荐
相关产品推荐

