全书目录

第二十七篇:Laravel 完全指南 —— 工匠城区宇宙

第四章:Route、Controller、Middleware —— 工坊前门是怎么运转的

1 分钟 263 字 第 481 / 962 个阅读单元

先看最外层。

在工匠城区里,Route 不是“写个 URL 映射”这么简单,它更像:

text
门牌系统 + 接单分发规则

Controller 也不是“把所有业务塞进去的类”,而是:

text
前台工头:收请求、做最薄一层协调、把活转给真正干活的人

Middleware 则是:

text
门口安检、资格检查、限流闸机、上下文预处理

最小心智图:

text
请求
  |
  v
Route 找到入口
  |
  v
Middleware 决定放不放行
  |
  v
Controller 接单
  |
  v
真正业务开始

一个很小的例子:

php
use App\Http\Controllers\OrderController;
use App\Http\Middleware\EnsureWorkshopOpen;
use Illuminate\Support\Facades\Route;

Route::middleware(EnsureWorkshopOpen::class)->group(function () {
    Route::get('/orders', [OrderController::class, 'index'])->name('orders.index');
    Route::post('/orders', [OrderController::class, 'store'])->name('orders.store');
});

这段代码翻译成工坊语言就是:

  • /orders 这条街归 OrderController 这个工头负责
  • 但在见到工头之前,先经过 EnsureWorkshopOpen 这个门检员
  • 如果工坊今天停工,就别接单

一个最小中间件:

php
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class EnsureWorkshopOpen
{
    public function handle(Request $request, Closure $next): Response
    {
        abort_if(config('workshop.closed'), 503, '工坊暂停接单');

        return $next($request);
    }
}

这里最容易犯的错误是:把 Controller 当成业务全集。

错误心智:

text
Route -> Controller 里写验证 + SQL + 调第三方 + 发事件 + 拼 JSON + 记日志 + 判断权限 + 发邮件

更健康的心智是:

text
Route = 门牌
Middleware = 门检
Controller = 协调
Service / Model / Event / Queue = 真正干活