6、MVC 开发模式

作者: 温新

图书: 【Laravel 11 构建 Web 应用与管理后台】

阅读: 141

时间: 2024-05-18 16:31:58

现在我们已经创建了 Migrations 并在 DB 中有了一个分类表,让我们在前端显示类别。

在节中,我们将熟悉 MVC(模型视图控制器):三个层负责查看数据,获取数据和路由输入。

开始下面的操作之前,先手动为 categories 表添加一些分类数据。这个就自己添加好了。

创建首页控制器

Laravel 提供了非常多而好用命令,创建控制器、模型等等,这个要多用。

$ php artisan make:controller HomeController

该命令会在app/Http/Controllers 目录下生成 HomeController.php 文件,我们对它进行修改,如下:

<?php

namespace App\Http\Controllers;
class HomeController extends Controller
{
    public function index()
    {
        $categories = ['PHP', 'Laravel'];

        return view('home', compact('categories'));
    }
}

index 方法获取到了分类数据,并将它传送到了 home 视图中。

视图输出

resources/views/home.blade.php

...
<!-- Categories widget-->
<div class="card mb-4">
    <div class="card-header">Categories</div>
    <div class="card-body">
        <div class="row">
            <div class="col-sm-6">
                <ul class="list-unstyled mb-0">
                    @foreach($categories as $category)
                        <li><a href="#!">{{ $category }}</a></li>
                    @endforeach
                </ul>
            </div>
        </div>
    </div>
</div>
...

找到 Categories 部分的代码进行修改。然后使用 @foreach 指令来遍历输出内容。

修改路由

routes/web.php

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\HomeController;

Route::get('/', [HomeController::class, 'index'])->name('home');

...

现在就可以进行访问啦。

现在, 这个流程已经结束了,但是,我们的数据是写死的,因此,我们需要从数据库读取数据。

我们可以使用 DB 也可以使用 Model,这里我们就使用 Model 进行查询了。

模型查询

1、创建模型

$ php artisan make:model Category

通常,Model 名称是单数形式的数据库名称。所有模型类都是在app/Models 类别中创建的,它们扩展了 Eloquent 的 Model 类。

默认情况下,如果你使用 Laravel 命名,类别模型将知道使用类别表,作为单词 “category” 的复数形式。如果您有其他命名,则可以在 Model中使用 protected $table 属性指定表名。

2、控制器使用模型查询

app/Http/Controllers/HomeController.php

<?php

namespace App\Http\Controllers;
use App\Models\Category;

class HomeController extends Controller
{
    public function index()
    {
        $categories = Category::all();

        return view('home', compact('categories'));
    }
}

3、修改视图

...
<ul class="list-unstyled mb-0">
    @foreach($categories as $category)
        <li><a href="#!">{{ $category->name }}</a></li>
    @endforeach
</ul>
...

理解 MVC 的整个工作流和请求生命周期是非常重要的:路由、控制器、模型和视图。

因此,路由有一个控制器和一个方法。在 Controllers 方法中,获取数据并将其传递给视图,然后视图显示这些数据。

请登录后再评论