首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
中间件-定义中间件
中间件-注册中间件
中间件-全局中间件
中间件-将中间件分配给路由
中间件-中间件组
中间件-排序中间件
中间件-中间件参数
中间件-可终止的中间件
CSRF保护-阻止CSRF请求
CSRF保护-CSRF Tokens & SPAs
CSRF保护-从CSRF保护中排除 URI
CSRF保护-X-CSRF-TOKEN
控制器-编写控制器
控制器-基本控制器
控制器-单动作控制器
控制器-控制器中间件
控制器-资源型控制器
控制器-部分资源路由
控制器-嵌套资源
控制器-命名资源路由
控制器-命名资源路由参数
控制器-限定范围的资源路由
控制器-本地化资源 URIs
控制器-补充资源控制器
控制器-单例资源控制器
控制器-依赖注入和控制器
HTTP请求-与请求交互
HTTP请求-访问请求
HTTP请求-请求路径、主机和方法
HTTP请求-请求头
HTTP请求-请求 IP 地址
HTTP请求-内容协商
HTTP请求-PSR-7 请求
HTTP请求-输入
HTTP请求-检索输入
HTTP请求-判断输入是否存在
HTTP请求-合并其他输入
HTTP请求-旧输入
HTTP请求-Cookies
HTTP请求-输入过滤和规范化
HTTP请求-文件
HTTP请求-检索上传的文件
HTTP请求-存储上传的文件
HTTP请求-配置受信任的代理
HTTP请求-配置可信任的 Host
当前位置:
首页>>
技术小册>>
Laravel(10.x)从入门到精通(三)
小册名称:Laravel(10.x)从入门到精通(三)
### 章节:中间件 - 注册中间件 在Laravel框架中,中间件(Middleware)是一种为进入应用程序的HTTP请求和离开应用程序的HTTP响应提供处理流程的便捷机制。它们可以执行诸如验证用户身份、记录日志、设置CORS(跨源资源共享)策略、处理请求数据等多种任务。正确注册和使用中间件,是构建安全、高效、可维护Laravel应用的关键步骤之一。本章将深入探讨如何在Laravel 10.x中注册中间件,包括全局中间件、路由中间件、控制器中间件以及中间件组的注册方式。 #### 一、理解中间件的基本概念 在深入注册中间件之前,我们先简要回顾一下中间件的基本概念。中间件被设计为一种封装了请求处理逻辑的对象,这些逻辑可以在请求被路由到控制器之前或响应发送给客户端之后执行。Laravel通过中间件提供了一个灵活的方式来过滤HTTP请求,从而允许你执行如认证、日志记录或输入验证等操作。 #### 二、全局中间件注册 全局中间件是指在每次HTTP请求时都会被自动调用的中间件。这种中间件对于执行跨应用的全局检查或操作特别有用,如CORS策略设置、性能监控等。 ##### 2.1 通过`Kernel.php`注册 在Laravel中,全局中间件主要在`app/Http/Kernel.php`文件的`$middleware`属性中注册。这个数组中的每一个元素都是一个字符串,表示中间件类的完全限定类名(包括命名空间)。 ```php protected $middleware = [ \App\Http\Middleware\TrustProxies::class, \Fruitcake\Cors\HandleCors::class, \App\Http\Middleware\LogRequest::class, // 假设我们添加了一个日志中间件 // 其他全局中间件... ]; ``` 当请求进入应用时,Laravel会按照数组中定义的顺序执行这些中间件。 #### 三、路由中间件注册 与全局中间件不同,路由中间件是可选的,可以根据路由的不同来指定哪些中间件应该被调用。这使得中间件的使用更加灵活和精细。 ##### 3.1 在路由文件中注册 在Laravel的路由文件中(如`routes/web.php`或`routes/api.php`),你可以使用`middleware`方法或中间件数组在路由定义中注册中间件。 ```php Route::get('/user/profile', function () { // })->middleware('auth:api'); // 使用auth:api中间件 // 或者使用中间件数组 Route::get('/admin/dashboard', function () { // })->middleware(['auth:api', 'admin.permission']); ``` ##### 3.2 在`Kernel.php`中定义别名 为了提高路由文件的可读性和维护性,Laravel允许你在`app/Http/Kernel.php`文件的`$routeMiddleware`属性中定义中间件的别名。这样,你就可以在路由定义中使用更简短的名称来引用复杂的中间件类了。 ```php protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth:api' => \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'admin.permission' => \App\Http\Middleware\CheckAdminPermission::class, // 其他路由中间件别名... ]; ``` #### 四、控制器中间件注册 在某些情况下,你可能希望将中间件直接绑定到控制器或控制器的方法上,以便更精确地控制中间件的执行范围。 ##### 4.1 控制器构造函数注册 你可以在控制器的构造函数中使用`$this->middleware`方法来注册中间件。这种方式适用于整个控制器或其所有方法的中间件。 ```php class UserController extends Controller { public function __construct() { $this->middleware('auth'); // 整个控制器都需要认证 // 或者为特定方法指定中间件 $this->middleware('log')->only(['show', 'update']); $this->middleware('subscribed')->except(['create']); } // ... } ``` ##### 4.2 控制器方法内注册 你也可以直接在控制器的方法中通过`middleware`方法注册中间件,这提供了更高的灵活性,允许你为单个方法指定中间件。 ```php class UserController extends Controller { public function update(Request $request, $id) { // ... } public function destroy($id) { $this->middleware('can:delete,user')->only('destroy'); // 注意:这里实际用法是错误示例,仅用于说明目的 // 正确做法是在路由或控制器构造函数中注册 } // 注意:上面的destroy方法示例只是为了说明,实际上你应该在路由或构造函数中注册中间件 } ``` #### 五、中间件组注册 中间件组允许你将多个中间件组织在一起,并在需要时一次性将它们应用到路由或控制器上。这可以极大地减少重复代码,并使路由和控制器更加清晰。 ##### 5.1 在`Kernel.php`中定义中间件组 在`app/Http/Kernel.php`文件的`$middlewareGroups`属性中,你可以定义中间件组。每个键是组的名称,值是一个包含中间件类的数组。 ```php protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // 其他web中间件... ], 'api' => [ 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, // 其他API中间件... ], // 自定义中间件组 'auth' => [ 'auth:api', 'admin.permission', ], ]; ``` ##### 5.2 使用中间件组 一旦定义了中间件组,你就可以在路由定义中通过组名来引用它们了。 ```php Route::middleware('auth')->group(function () { // 这里的路由都将自动应用auth中间件组中的中间件 Route::get('/admin/dashboard', 'AdminController@dashboard'); // ... }); // 或者在路由定义中直接指定中间件组名 Route::get('/user/profile', 'UserController@profile')->middleware('auth'); ``` #### 六、总结 中间件是Laravel中一个强大而灵活的特性,通过正确的注册和使用,可以显著提升应用程序的安全性、性能和可维护性。在Laravel 10.x中,你可以通过全局中间件、路由中间件、控制器中间件以及中间件组等多种方式来注册中间件,以满足不同的需求场景。理解并掌握这些注册方式,对于开发高效、可扩展的Laravel应用至关重要。希望本章的内容能够帮助你更好地理解和应用Laravel的中间件机制。
上一篇:
中间件-定义中间件
下一篇:
中间件-全局中间件
该分类下的相关小册推荐:
Shopify应用实战开发
PHP合辑3-数组函数
Magento零基础到架构师(内容设计)
PHP高性能框架-Swoole
PHP程序员的设计模式
PHP合辑2-高级进阶
Laravel(10.x)从入门到精通(十三)
Magento2后端开发高级实战
PHP合辑1-基础入门
Yii2框架从入门到精通(中)
Magento零基础到架构师(安装篇)
Magento零基础到架构师(库存管理)