首页 后端开发 php教程 了解 Laravel 中间件:深入探讨 Laravel #s 新方法

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

Sep 10, 2024 pm 06:30 PM

Understanding Laravel Middleware: A Deep Dive into Laravel #s New Approach

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 应用程序中使用中间件的一些常见原因:

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

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1274
29
C# 教程
1256
24
说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1? 说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1? Apr 17, 2025 am 12:06 AM

在PHP中,应使用password_hash和password_verify函数实现安全的密码哈希处理,不应使用MD5或SHA1。1)password_hash生成包含盐值的哈希,增强安全性。2)password_verify验证密码,通过比较哈希值确保安全。3)MD5和SHA1易受攻击且缺乏盐值,不适合现代密码安全。

PHP和Python:比较两种流行的编程语言 PHP和Python:比较两种流行的编程语言 Apr 14, 2025 am 12:13 AM

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

PHP行动:现实世界中的示例和应用程序 PHP行动:现实世界中的示例和应用程序 Apr 14, 2025 am 12:19 AM

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型? PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型? Apr 17, 2025 am 12:25 AM

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。

PHP的持久相关性:它还活着吗? PHP的持久相关性:它还活着吗? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在现代编程领域中依然占据重要地位。1)PHP的简单易学和强大社区支持使其在Web开发中广泛应用;2)其灵活性和稳定性使其在处理Web表单、数据库操作和文件处理等方面表现出色;3)PHP不断进化和优化,适用于初学者和经验丰富的开发者。

PHP和Python:解释了不同的范例 PHP和Python:解释了不同的范例 Apr 18, 2025 am 12:26 AM

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP和Python:代码示例和比较 PHP和Python:代码示例和比较 Apr 15, 2025 am 12:07 AM

PHP和Python各有优劣,选择取决于项目需求和个人偏好。1.PHP适合快速开发和维护大型Web应用。2.Python在数据科学和机器学习领域占据主导地位。

您如何防止PHP中的SQL注入? (准备的陈述,PDO) 您如何防止PHP中的SQL注入? (准备的陈述,PDO) Apr 15, 2025 am 12:15 AM

在PHP中使用预处理语句和PDO可以有效防范SQL注入攻击。1)使用PDO连接数据库并设置错误模式。2)通过prepare方法创建预处理语句,使用占位符和execute方法传递数据。3)处理查询结果并确保代码的安全性和性能。

See all articles