Laravel点击专辑封面跳转详情页,Foreach循环返回全部结果问题
问题解决步骤
你的问题核心是没有传递被点击专辑的ID到详情页,且控制器没有根据ID查询指定专辑,以下是具体修改方案:
1. 修正路由(web.php)
添加支持专辑ID的详情页路由,用Laravel路由模型绑定简化查询逻辑:
Route::get('/albums/{album}', [AlbumDetailsController::class, 'show'])->name('albums.show');
2. 修改控制器(AlbumDetailsController)
替换原有的index方法为show方法,直接接收专辑模型实例,自动获取指定专辑:
public function show(Album $album): View { return View("details.index", [ 'album' => $album ]); }
路由模型绑定会自动根据URL中的ID匹配对应专辑,若专辑不存在则返回404页面,无需手动编写
Album::find($id)这类查询代码。
3. 修正专辑列表页的跳转链接
在你展示「一列专辑封面」的页面(非详情页),将封面的跳转链接修改为指向详情路由,传递当前专辑参数:
<a href="{{ route('albums.show', $album) }}"> <img src="{{ asset('storage/' . $album->image_path) }}" alt="{{ $album->name }}" class="img-fluid"> </a>
4. 修改详情页Blade视图
现在传递到详情页的是单个专辑对象$album,而非集合$albums,因此移除@foreach循环,直接使用单个变量渲染内容:
@extends('layouts.app') @section('content') <div class="container"> <h1 class="my-4"><a href="#" class="text-dark">{{ $album->name }}</a></h1> <div class="row"> <div class="col-lg-6 mb-4"> <div class="card h-100"> <div class="card-body"> <h4 class="card-title"></h4> <span class="text-dark">{{ $album->artist }}</span> </div> </div> </div> <div class="col-lg-6 mb-4"> <div class="card h-100"> <img src="{{ asset('storage/' . $album->image_path) }}" alt="{{ $album->name }}" class="img-fluid card-img-top"> <div class="card-body"> <h4 class="card-title"> <span class="text-dark">{{ $album->artist }}</span> </h4> <p class="text-dark">{{ $album->description }}</p> </div> </div> </div> </div> </div> @endsection
提示:把原代码中不必要的空
<a href="#">标签改成<span>,避免无效跳转。
内容的提问来源于stack exchange,提问作者Pawel
相关产品推荐
相关产品推荐

