0

0

了解 Laravel 中间件:深入探讨 Laravel #s 新方法

PHPz

PHPz

发布时间:2024-09-10 19:00:23

|

883人浏览过

|

来源于dev.to

转载

了解 laravel 中间件:深入探讨 laravel #s 新方法

laravel 中间件简介

中间件是现代 web 开发中的一个基本概念,laravel 这个流行的 php 框架广泛使用它来处理 http 请求。无论您是构建简单的 api 还是大型 web 应用程序,了解 laravel 中的中间件都是编写更清晰、更易于管理且高效的代码的关键。

在本文中,我们将深入探讨 laravel 中间件,解释它是什么、为什么应该使用它以及如何有效地使用它。我们还将了解 laravel 11 中的中间件结构,其中发生了重大变化,包括删除了 http 内核。最后,我们将逐步介绍 laravel 中自定义中间件的创建和使用。

目录

  1. 什么是中间件?
  2. 为什么使用中间件?
  3. laravel 中的中间件类型
  4. 中间件的好处
  5. laravel 11 中的中间件结构
  6. 如何创建和使用自定义中间件
  7. 使用中间件的实际示例
  8. laravel 中间件的最佳实践
  9. 结论

1.什么是中间件?

中间件本质上是位于传入 http 请求和应用程序之间的过滤器或层。它拦截传入的请求,并在将请求传递到下一层之前执行各种任务,例如身份验证、日志记录和请求修改。处理后,中间件可以允许请求继续发送到应用程序、修改响应或直接拒绝请求。

简单来说,中间件就像应用程序的安全门或守卫。对应用程序的每个请求都必须通过中间件,并且您可以根据请求的类型定义不同的行为。

2. 为什么使用中间件?

中间件提供了一种方便的机制来过滤或修改进入应用程序的 http 请求。以下是 laravel 应用程序中使用中间件的一些常见原因:

GradPen论文
GradPen论文

GradPen是一款AI论文智能助手,深度融合DeepSeek,为您的学术之路保驾护航,祝您写作顺利!

下载

身份验证和授权:中间件可以确保只有经过身份验证的用户或具有特定权限的用户才能访问某些路由。
维护模式:中间件可以检查应用程序是否处于维护模式,并为所有传入请求返回维护消息。
日志记录和监控:中间件可以记录每个请求或监控性能,帮助开发人员跟踪应用程序性能。
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 文件的样子:

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
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
 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

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

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








热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

319

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

278

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

372

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

374

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

85

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

65

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

68

2025.08.05

什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

178

2024.05.11

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Laravel---API接口
Laravel---API接口

共7课时 | 0.6万人学习

PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号