了解 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 文件的样子:

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 LaravelCreating 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 MiddlewareYou can create middleware using the Artisan command:php artisan make:middleware CheckAgeThis command will create a new middleware class in the app/Http/Middleware directory. The newly created CheckAge.php file will look something like this:```phpage ```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', AppHttpMiddlewareCheckAge::class);    })    ->create();```Now, your middleware alias check.age is available for use in your routes.Step 3: Apply the Middleware to RoutesOnce the middleware is registered, you can apply it to routes or route groups:```php 18})->middleware('check.age');?>```## 7. Practical Examples of Using MiddlewareMiddleware 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.```phpurl());        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.```phprole != 'admin') {            return redirect('/home');        }        return $next($request);    }}?>```## 8. Best Practices for Middleware in LaravelHere 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 新方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1246238.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月9日 18:25:24
下一篇 2025年12月9日 18:25:41

相关推荐

  • 在 Laravel 中对底部为空值和非空值的行进行降序排序

    使用数据库时,经常会遇到某些字段可能为空或 null 的情况。经常出现的一个挑战是如何对记录进行排序,以便具有空字段的行出现在结果集的底部,而具有非空值的行以有意义的方式排序(例如,降序)。在这篇文章中,我将通过一个实际示例向您展示如何在 laravel 中实现这一目标。 设想 假设您有一个活动的参…

    2025年12月9日
    000
  • Ubuntu 中 Laravel 安装步骤

    要在新的 ubuntu 中设置 laravel,请按照以下步骤操作: 步骤一:更新升级系统包 运行以下命令来更新系统的软件包列表并升级已安装的软件包: sudo apt updatesudo apt upgrade 第 2 步:安装 apache(或 nginx) 对于 web 服务器,您可以选择 …

    2025年12月9日
    000
  • 为什么要在 Laravel 中实现存储库模式?

    laravel 中的存储库模式简介 存储库模式是一种设计模式,用于管理数据访问逻辑并将其集中在一个地方。这种模式有助于将检索和保存数据的逻辑与业务逻辑分开,使代码库更加模块化、可重用和可测试。 在 laravel 中,存储库模式可用于抽象与数据模型(如 eloquent 模型)的交互,使您的代码随着…

    2025年12月9日
    000
  • 优化 Laravel 查询:分块数据的正确方法

    为什么应该避免使用块? 最好使用 chunkbyid 而不是 chunk 以避免批量更新时丢失行。使用 chunk 可以在更新行后移动后续查询的偏移量,从而导致跳过未处理的行。 例如: post::where(‘processed’, 0)->chunk(100, function($post…

    2025年12月9日
    000
  • Laravel 中的 defer() 函数如何工作?

    Taylor Otwell 最近宣布了 Laravel 中的新函数 defer()。这只是对 defer() 函数如何工作以及使用它可能遇到的问题进行非常基本的概述。 找出问题还记得您曾经需要从 API 获取某些内容,然后在幕后执行一些用户不关心但仍在等待的操作的路由吗?是的,我们都至少经历过一次,…

    2025年12月9日
    000
  • 拉维尔 |节流|服务提供商|服务容器

    节流或速率限制限制是一种用于限制在特定时间段内向某些路由或控制器发出的请求数量的机制。这通常用于防止滥用或过度使用某些端点、API 或资源。 服务提供商服务提供者是所有 Laravel 应用程序引导的中心位置。您自己的应用程序以及 Laravel 的所有核心服务都是通过服务提供商引导的。“引导”是什…

    2025年12月9日
    000
  • Simples Mudanças, Grandes Impactos: Como Fortalecer a Segurança da Sua Aplicação Laravel

    如果您已经参与过 laravel 项目,您肯定已经注意到该框架如何提供各种有用的开发工具。但是,你有没有想过你是否可能错过了一个错误?在使用这些工具时,您是否最终错过了一些简单但重要的细节来确保系统的安全? 在本文中,我将向您展示一些“简单”的错误,但非常常见且易于解决。 进行安全部署? 在互联网上…

    2025年12月9日
    000
  • 使用 Filament 和 Laravel 构建强大的管理面板:分步指南

    laravel 是一个强大的 php 框架,为开发 web 应用程序提供了坚实的基础。 filament 是一个开源、优雅的 laravel 管理面板和表单构建器,可简化管理界面的创建。本指南将引导您使用最新版本的 filament 和 laravel 构建强大的管理面板。 laravel saas…

    2025年12月9日
    000
  • 关于 PHP 代码安全性您应该了解的内容

    在 web 开发方面,php 是一种广泛使用的脚本语言。随着 php 的流行,了解与 php 相关的潜在安全风险以及缓解这些风险的措施至关重要。无论您使用 wordpress 部署 cms 应用程序还是使用 laravel php 框架构建企业应用程序,php 安全性的重要性以及一些值得注意的 ph…

    2025年12月9日
    000
  • Laravel Cloud:为什么它很重要?

    在最近的 Laracon 大会上,Taylor 向 Laravel 开发者们宣布了 Laravel Cloud,他的愿景是在一分钟之内让一个 Laravel 应用程序从本地到生产,坦白地看了大会上的演示后,这绝对是很快的。 Laravel Cloud 发布后,我们不必担心服务器、AWS、数据库和队列…

    2025年12月9日
    000
  • PHP 中描述性命名约定的实践:编写简洁可读代码的指南

    描述性命名约定有助于使您的代码更具可读性、可维护性和自记录性。通过使用清楚传达变量、函数和类用途的名称,您可以帮助自己和其他人理解您的代码,而无需额外的注释或解释。 以下是如何在 php 中采用描述性命名约定以及实用指南和示例: 1. 使用名词作为类名 类名应该代表它们管理的实体。描述性的类名称阐明…

    2025年12月9日
    000
  • Laravel Lumen – 在 Plesk 上无法访问存储文件夹

    Laravel Lumen – 在 Plesk 上无法访问存储文件夹 2024 年 9 月 6 日 评论:1 答案:0 -1 我尝试使用符号链接访问存储/公共文件夹,但每当我尝试访问文件时,plesk 似乎都会抛出错误。 我有以下结构:/public 包含到 /storage/app/p…

    2025年12月9日
    000
  • 婴儿学步学习 Laravel

    欢迎回来,开发者! ✨ 在 laravel 之旅的这一章中(请记住,我在撰写这些文章时正在学习,因此这将是您能找到的最现实的教程系列之一!),我们将深入研究我们的 laravel 项目。我们将探索项目结构,熟悉迁移,并以最简单的方式分解 mvc 架构。 ?今天的议程: 探索我们的项目结构 ?️ 了解…

    2025年12月9日
    000
  • 为 Laravel 设置开发环境

    ? 在 windows 上设置 laravel 开发环境 ?️ 嘿开发者! ? 欢迎来到我的新系列,我将深入 laravel 的世界! ? 当我自己学习 laravel 时,我很高兴能分享我迄今为止收集的知识和见解。我的目标是帮助您顺利高效地进入 laravel 开发。 ? 我相信共享学习的力量,因…

    2025年12月9日
    000
  • 用于监控 Laravel Octane 的 NewRelic 替代方案

    我最近有机会讨论巴西开发团队对 inspector 的采用。当时他们正在使用 newrelic 来监控他们的应用程序,但发现它与 laravel octane 不兼容。 自从 laravel octane 发布以来,我就彻底研究了它的内部动态,以确保 inspector laravel 包继续正常工…

    2025年12月9日
    000
  • 掌握 PHP 和 MySQL:现代开发人员的详尽指南

    掌握 php 和 mysql:现代开发人员的详尽指南 ? php 和 mysql 构成了许多动态网站和 web 应用程序的支柱。该综合指南涵盖了先进概念、最佳实践和现代工具,可帮助开发人员充分利用这些技术的潜力。通过详细信息和实用技巧深入了解 php 和 mysql。 1. php 和 mysql …

    2025年12月9日
    000
  • 将 Vuejs 添加到 TALL Stack 项目的好处

    将 Vue.js 添加到 TALL Stack 项目的好处 TALL 堆栈由 Tailwind CSS、Alpine.js、Laravel 和 Livewire 组成,是用于构建现代动态 Web 应用程序的强大工具包。这种组合在开发人员中特别受欢迎,他们欣赏它提供的简化的开发流程,允许以最少的努力创…

    2025年12月9日
    000
  • PHP 函数扩展的最佳实践是什么?

    遵循最佳实践可提升 php 函数扩展的可靠性与效率:编写指南:保持代码简洁,采用命名空间,进行类型检查,避免副作用。性能优化:使用缓存,避免分配,考虑配置文件。安全注意事项:验证输入,限制权限,处理异常。实战案例:示例扩展演示了这些原则在文件上传处理中的应用。 PHP 函数扩展的最佳实践 引言 PH…

    2025年12月9日
    000
  • 如何使用 PHP 与日历服务同步?

    如何使用 php 与日历服务同步?可以通过以下步骤使用 php 与日历服务(如 google 日历或 apple 日历)同步:初始化客户端授权客户端创建 google 服务获取事件(可选)创建事件(可选)删除事件(可选) 如何使用 PHP 与日历服务同步? 前言 日历服务(如 Google 日历或 …

    2025年12月9日
    000
  • PHP 如何与云计算平台集成?

    php可通过restful api与云平台集成,提供按需资源和弹性。通过使用sdk(如aws sdk for php和gcp sdk for php)可以简化集成。实用案例包括使用aws sdk与无服务器aws lambda函数进行交互,通过创建lambda函数、编写代码、配置触发器并在php中调用…

    2025年12月9日
    000

发表回复

登录后才能评论
关注微信