6、MVC 开发模式
现在我们已经创建了 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 方法中,获取数据并将其传递给视图,然后视图显示这些数据。