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

Laravel实现点击别墅名称跳转对应详情页的最优方案咨询

Laravel 别墅列表与详情页实现方案

1. 准备模型与数据库迁移

如果还没有别墅对应的模型和数据表,先执行以下操作:

php artisan make:model Villa -m

打开生成的迁移文件(路径:database/migrations/xxxx_xx_xx_create_villas_table.php),添加所需字段:

public function up()
{
    Schema::create('villas', function (Blueprint $table) {
        $table->id();
        $table->string('title'); // 别墅标题
        $table->text('address'); // 地址
        $table->text('description'); // 详细描述
        $table->string('image')->nullable(); // 图片路径(可为空)
        $table->timestamps();
    });
}

执行迁移创建表:

php artisan migrate

在app/Models/Villa.php中设置可填充字段:

protected $fillable = ['title', 'address', 'description', 'image'];

2. 定义路由

在routes/web.php中添加列表页和详情页路由:

use App\Http\Controllers\VillaController;

// 别墅列表页
Route::get('/villas', [VillaController::class, 'index'])->name('villas.index');

// 别墅详情页(通过ID匹配,使用路由模型绑定)
Route::get('/villas/{villa}', [VillaController::class, 'show'])->name('villas.show');

3. 编写控制器逻辑

生成控制器:

php artisan make:controller VillaController

在app/Http/Controllers/VillaController.php中实现列表和详情方法:

namespace App\Http\Controllers;

use App\Models\Villa;

class VillaController extends Controller
{
    // 展示所有别墅列表
    public function index()
    {
        // 如需分页,可改为 Villa::paginate(10)
        $villas = Villa::all();
        return view('villas.index', compact('villas'));
    }

    // 展示单个别墅详情
    public function show(Villa $villa)
    {
        // 路由模型绑定自动根据ID查询对应别墅,无需手动写findOrFail
        return view('villas.show', compact('villa'));
    }
}

4. 编写列表页视图

创建resources/views/villas/index.blade.php,展示别墅列表并添加详情跳转链接:

<!DOCTYPE html>
<html>
<head>
    <title>别墅列表</title>
</head>
<body>
    <h1>别墅列表</h1>
    <div class="villa-list">
        @foreach($villas as $villa)
            <div class="villa-item">
                <!-- 通过路由名称生成详情页链接,传入别墅实例自动携带ID -->
                <h2><a href="{{ route('villas.show', $villa) }}">{{ $villa->title }}</a></h2>
                <p>地址:{{ $villa->address }}</p>
            </div>
        @endforeach
    </div>
</body>
</html>

5. 编写详情页视图

创建resources/views/villas/show.blade.php,展示单个别墅的完整信息:

<!DOCTYPE html>
<html>
<head>
    <title>{{ $villa->title }} - 详情页</title>
</head>
<body>
    <h1>{{ $villa->title }}</h1>
    <!-- 显示图片,需先执行php artisan storage:link建立软链 -->
    @if($villa->image)
        <img src="{{ asset('storage/' . $villa->image) }}" alt="{{ $villa->title }}">
    @endif
    <p><strong>地址:</strong>{{ $villa->address }}</p>
    <p><strong>详细描述:</strong>{{ $villa->description }}</p>
    <a href="{{ route('villas.index') }}">返回别墅列表</a>
</body>
</html>

补充提示

  • 若使用图片存储,需执行php artisan storage:link将storage/app/public目录软链到public/storage,确保图片能正常访问
  • 列表页可通过Villa::paginate(10)实现分页,并在视图底部添加{{ $villas->links() }}渲染分页按钮
  • 路由模型绑定会自动处理ID不存在的情况,返回404页面,无需额外判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:45:40