什么是中间件
中间件是一种检查、过滤到达应用的 HTTP 请求的机制。 你可以在请求到达控制器前后插入处理逻辑。 比如 Laravel 内置了认证中间件。 当用户未认证时,会重定向到登录页面;若已认证,则允许请求继续进入应用内部。 除认证外,还可以为日志记录、CSRF 保护、限流等各种目的编写中间件。关于 Laravel 13 CSRF 保护的详细内容,请参阅 CSRF 保护。用户自定义的中间件通常放在
app/Http/Middleware 目录下。内置中间件
Laravel 默认准备了web 与 api 两个中间件组。
routes/web.php 会自动应用 web 组,routes/api.php 会自动应用 api 组。
对常用中间件,还设置了别名,可以用简短的名字引用。
创建中间件
使用make:middleware Artisan 命令创建新的中间件。
app/Http/Middleware/EnsureTokenIsValid.php。
在 handle 方法中编写处理请求的逻辑。
$next($request) 会将请求交给应用的下一环处理。
若不满足条件,可以返回重定向或响应,从而阻止请求继续。
请求前后的处理
中间件可以在请求之前或之后执行逻辑。注册中间件
全局中间件
若希望所有请求都执行该中间件,请在bootstrap/app.php 的 withMiddleware 中添加到全局栈。
append 追加到栈末尾。要放到最前面请用 prepend。
对路由应用中间件
若只对特定路由应用中间件,可在路由定义上调用middleware。
withoutMiddleware。
中间件别名
可以为较长的类名设置短别名。在bootstrap/app.php 中配置。
中间件组
将多个中间件归为一个键,便于统一应用到路由。 在bootstrap/app.php 中使用 appendToGroup 或 prependToGroup。
web 或 api 分组添加中间件,可使用专用方法。
中间件参数
中间件可以接收额外参数。 在handle 方法的 $next 参数之后添加参数即可。
: 分隔。
实用示例:认证检查中间件
一个简单的示例:把未登录用户重定向到登录页。下一步
HTTP 请求
学习如何在控制器中接收请求数据。