了解 Laravel 中间件:深入探讨 Laravel #s 新方法
“纵有疾风来,人生不言弃”,这句话送给正在学习文章的朋友们,也希望在阅读本文《了解 Laravel 中间件:深入探讨 Laravel #s 新方法》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新文章相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!
laravel 中间件简介
中间件是现代 web 开发中的一个基本概念,laravel 这个流行的 php 框架广泛使用它来处理 http 请求。无论您是构建简单的 api 还是大型 web 应用程序,了解 laravel 中的中间件都是编写更清晰、更易于管理且高效的代码的关键。
在本文中,我们将深入探讨 laravel 中间件,解释它是什么、为什么应该使用它以及如何有效地使用它。我们还将了解 laravel 11 中的中间件结构,其中发生了重大变化,包括删除了 http 内核。最后,我们将逐步介绍 laravel 中自定义中间件的创建和使用。
目录
- 什么是中间件?
- 为什么使用中间件?
- laravel 中的中间件类型
- 中间件的好处
- laravel 11 中的中间件结构
- 如何创建和使用自定义中间件
- 使用中间件的实际示例
- laravel 中间件的最佳实践
- 结论
1.什么是中间件?
中间件本质上是位于传入 http 请求和应用程序之间的过滤器或层。它拦截传入的请求,并在将请求传递到下一层之前执行各种任务,例如身份验证、日志记录和请求修改。处理后,中间件可以允许请求继续发送到应用程序、修改响应或直接拒绝请求。
简单来说,中间件就像应用程序的安全门或守卫。对应用程序的每个请求都必须通过中间件,并且您可以根据请求的类型定义不同的行为。
2. 为什么使用中间件?
中间件提供了一种方便的机制来过滤或修改进入应用程序的 http 请求。以下是 laravel 应用程序中使用中间件的一些常见原因:
身份验证和授权:中间件可以确保只有经过身份验证的用户或具有特定权限的用户才能访问某些路由。
维护模式:中间件可以检查应用程序是否处于维护模式,并为所有传入请求返回维护消息。
日志记录和监控:中间件可以记录每个请求或监控性能,帮助开发人员跟踪应用程序性能。
cors(跨源资源共享):中间件可以处理 cors 标头,允许或拒绝来自外部源的请求。
请求修改:您可能希望在请求数据到达控制器之前对其进行修改,例如修剪输入字符串或清理输入。
通过使用中间件,您可以保持应用程序逻辑干净,并与横切关注点(例如安全性、日志记录或请求修改)分开。
3. laravel 中的中间件类型
在 laravel 中,中间件一般可以分为三种类型:
全局中间件
全局中间件适用于进入应用程序的每个 http 请求。它定义一次并自动应用于所有路由。例如,您可能希望为向应用程序发出的每个请求启用日志记录。
特定于路由的中间件
这种类型的中间件仅应用于特定的路由或路由组。您可以将其附加到单个路由或具有相似行为的一组路由。例如,您可以仅将身份验证中间件应用于需要登录用户的路由。
中间件组
中间件组允许您定义可以作为一个组一起应用的多个中间件。 laravel 附带了一些默认的中间件组,例如 web 和 api 组。这些组捆绑了应分别应用于所有 web 或 api 请求的中间件。
4. 中间件的好处
中间件为 laravel 开发人员提供了多项好处:
1。关注点分离
中间件通过将特定逻辑与主应用程序流程隔离来帮助分离关注点。这使得维护和扩展应用程序变得更加容易,因为应用程序的职责被分为不同的层。
2。可重复使用性
一旦定义,中间件就可以在多个路由和应用程序中重复使用。这确保您只需编写一次中间件逻辑并在必要时应用它。
3。安全
中间件允许您在应用程序的入口点实现与安全相关的逻辑,例如身份验证和授权,确保未经授权的请求永远不会到达您的核心逻辑。
4。定制
laravel 中间件非常灵活且可定制。您可以创建中间件来修改请求、根据特定条件重定向用户或在响应返回到客户端之前对其进行操作。
5。集中错误处理
中间件允许您以集中的方式管理错误和异常。您可以捕获异常或验证错误并在您的应用程序中统一处理它们。
5. laravel 11 中的中间件结构
laravel 11 发生了一些重要的结构变化,特别是在中间件的处理方式方面。在 laravel 11 之前,所有中间件配置都在 http kernel 文件 (app/http/kernel.php) 中处理。然而,laravel 11 引入了一种更干净、更模块化的方法。
http 内核的移除
在 laravel 11 中,http 内核已被删除,中间件现在在 bootstrap/app.php 文件中配置。对于熟悉传统 http 内核结构的开发人员来说,这可能感觉像是一个重大的范式转变,但它允许以更简化、更灵活的方式来注册和管理中间件。
这是 laravel 11 中默认 bootstrap/app.php 文件的样子:
<?php return Application::configure() ->withProviders() ->withRouting( web: __DIR__.'/../routes/web.php', // api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', // channels: __DIR__.'/../routes/channels.php', ) ->withMiddleware(function (Middleware $middleware) { // }) ->withExceptions(function (Exceptions $exceptions) { // })->create(); ?>``` **Middleware Management** In Laravel 11, middleware is now handled through the withMiddleware() method, which accepts a callable function. Inside this callable, you can register, modify, or remove middleware. ## 6. How to Create and Use Custom Middleware in Laravel Creating custom middleware in Laravel allows you to extend the default behavior of your application. Here’s how to create and use custom middleware in Laravel: Step 1: Create the Middleware You can create middleware using the Artisan command: php artisan make:middleware CheckAge This command will create a new middleware class in the app/Http/Middleware directory. The newly created CheckAge.php file will look something like this: ```php <?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class CheckAge { /** * Handle an incoming request. */ public function handle(Request $request, Closure $next) { if ($request->age <= 18) { return redirect('home'); } return $next($request); } }?>``` In this example, the CheckAge middleware checks the user's age and redirects them if they are under 18. If the user passes the condition, the request continues to the next layer. **Step 2: Register the Middleware** Since Laravel 11 no longer uses the Http Kernel, you will need to register your middleware in the bootstrap/app.php file. Here’s how you can register your custom middleware: ```php return Application::configure() ->withProviders() ->withRouting( web: __DIR__.'/../routes/web.php', ) ->withMiddleware(function (Middleware $middleware) { $middleware->alias('check.age', \App\Http\Middleware\CheckAge::class); }) ->create();``` Now, your middleware alias check.age is available for use in your routes. Step 3: Apply the Middleware to Routes Once the middleware is registered, you can apply it to routes or route groups: ```php <?php Route::get('/dashboard', function () { // Only accessible if age > 18 })->middleware('check.age');?>``` ## 7. Practical Examples of Using Middleware Middleware can be used for a variety of tasks in Laravel. Let’s look at a few practical use cases. **Example 1: Logging Requests** You can create middleware to log incoming requests to a file or a logging service. This can help you monitor the behavior of your application. ```php <?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Log; use Illuminate\Http\Request; class LogRequest { public function handle(Request $request, Closure $next) { Log::info('Request URL: ' . $request->url()); return $next($request); } }?>``` **Example 2: Checking User Roles** You can use middleware to restrict access based on user roles. For example, only allow access to certain routes if the user has an admin role. ```php <?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth; class CheckRole { public function handle($request, Closure $next) { if (Auth::user() && Auth::user()->role != 'admin') { return redirect('/home'); } return $next($request); } }?>``` ## 8. Best Practices for Middleware in Laravel Here are some best practices to follow when working with middleware in Laravel: **1. Keep Middleware Focused** Middleware should be responsible for a single task. If you find that your middleware is doing too much, consider splitting it into smaller, more focused middleware. **2. Use Route-Specific Middleware** Use route-specific middleware when possible. Applying middleware globally can lead to performance overhead and unnecessary checks on routes that don’t need them. **3. Avoid Complex Logic** Middleware should be kept simple. Complex logic or business rules should be handled in the controller
以上就是《了解 Laravel 中间件:深入探讨 Laravel #s 新方法》的详细内容,更多关于的资料请关注golang学习网公众号!

- 上一篇
- 如何将函数用作 Java 中的回调?

- 下一篇
- 博客#he CyberFriend 的开始
-
- 文章 · php教程 | 1天前 |
- PHPCMS与织梦CMS移动端适配对比分析
- 220浏览 收藏
-
- 文章 · php教程 | 1天前 |
- PHP读取IP文件实现访问控制教程
- 480浏览 收藏
-
- 文章 · php教程 | 1天前 |
- PHP函数定义与调用全解析
- 242浏览 收藏
-
- 文章 · php教程 | 1天前 |
- PHP验证手机号正则表达式教程
- 426浏览 收藏
-
- 文章 · php教程 | 1天前 |
- Symfony中MongoDB转数组的实用方法
- 300浏览 收藏
-
- 文章 · php教程 | 1天前 |
- WooCommerce分类筛选问题解决方法
- 198浏览 收藏
-
- 文章 · php教程 | 1天前 |
- PHP图片处理进阶:GD库实战教程
- 386浏览 收藏
-
- 文章 · php教程 | 1天前 |
- RESTfulAPI开发:PHP接口设计全解析
- 117浏览 收藏
-
- 文章 · php教程 | 1天前 |
- Twilio语音通话保持与恢复方法
- 213浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 511次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 498次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- 千音漫语
- 千音漫语,北京熠声科技倾力打造的智能声音创作助手,提供AI配音、音视频翻译、语音识别、声音克隆等强大功能,助力有声书制作、视频创作、教育培训等领域,官网:https://qianyin123.com
- 143次使用
-
- MiniWork
- MiniWork是一款智能高效的AI工具平台,专为提升工作与学习效率而设计。整合文本处理、图像生成、营销策划及运营管理等多元AI工具,提供精准智能解决方案,让复杂工作简单高效。
- 136次使用
-
- NoCode
- NoCode (nocode.cn)是领先的无代码开发平台,通过拖放、AI对话等简单操作,助您快速创建各类应用、网站与管理系统。无需编程知识,轻松实现个人生活、商业经营、企业管理多场景需求,大幅降低开发门槛,高效低成本。
- 151次使用
-
- 达医智影
- 达医智影,阿里巴巴达摩院医疗AI创新力作。全球率先利用平扫CT实现“一扫多筛”,仅一次CT扫描即可高效识别多种癌症、急症及慢病,为疾病早期发现提供智能、精准的AI影像早筛解决方案。
- 144次使用
-
- 智慧芽Eureka
- 智慧芽Eureka,专为技术创新打造的AI Agent平台。深度理解专利、研发、生物医药、材料、科创等复杂场景,通过专家级AI Agent精准执行任务,智能化工作流解放70%生产力,让您专注核心创新。
- 152次使用
-
- PHP技术的高薪回报与发展前景
- 2023-10-08 501浏览
-
- 基于 PHP 的商场优惠券系统开发中的常见问题解决方案
- 2023-10-05 501浏览
-
- 如何使用PHP开发简单的在线支付功能
- 2023-09-27 501浏览
-
- PHP消息队列开发指南:实现分布式缓存刷新器
- 2023-09-30 501浏览
-
- 如何在PHP微服务中实现分布式任务分配和调度
- 2023-10-04 501浏览