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 方法中,获取数据并将其传递给视图,然后视图显示这些数据。