先看最外层。
在工匠城区里,Route 不是“写个 URL 映射”这么简单,它更像:
门牌系统 + 接单分发规则Controller 也不是“把所有业务塞进去的类”,而是:
前台工头:收请求、做最薄一层协调、把活转给真正干活的人Middleware 则是:
门口安检、资格检查、限流闸机、上下文预处理最小心智图:
请求
|
v
Route 找到入口
|
v
Middleware 决定放不放行
|
v
Controller 接单
|
v
真正业务开始一个很小的例子:
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
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 当成业务全集。
错误心智:
Route -> Controller 里写验证 + SQL + 调第三方 + 发事件 + 拼 JSON + 记日志 + 判断权限 + 发邮件更健康的心智是:
Route = 门牌
Middleware = 门检
Controller = 协调
Service / Model / Event / Queue = 真正干活