📌  相关文章
📜  Route::group(['middleware'=>'auth'], function() { - Javascript (1)

📅  最后修改于: 2023-12-03 14:47:07.417000             🧑  作者: Mango

Laravel中间件入门

本文将为大家介绍在Laravel中使用中间件的方法和原理。

中间件是一种可插拔的代码,它可以用于处理请求、响应或做其他操作。在Laravel中,中间件可以用于过滤HTTP请求,例如身份验证或记录请求信息。中间件还可以与脚手架集成,扩展应用程序的功能。Laravel自带了几个内置的中间件,如身份验证等。

安装Laravel

在开始之前,您需要安装Laravel。安装Laravel的最简单方法是使用Laravel的安装器composer。运行以下命令:

composer create-project --prefer-dist laravel/laravel myapp
创建中间件

Laravel提供了一种快速创建中间件的方法。可以使用以下命令创建一个名为MyMiddleware的中间件:

php artisan make:middleware MyMiddleware

该命令将在app/Http/Middleware目录下创建一个新的PHP类MyMiddleware。该类包含两个方法handleterminate,如下所示:

<?php

namespace App\Http\Middleware;

use Closure;

class MyMiddleware
{
    /**
     * 处理请求
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }

    /**
     * 处理响应
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Illuminate\Http\Response  $response
     * @return mixed
     */
    public function terminate($request, $response)
    {
        //
    }
}

handle方法中,如果中间件处理完请求,则必须防止继续处理流程,并返回响应。

terminate方法中,可以对响应进行一些最后的操作。

注册中间件

可以在app/Http/Kernel.php中注册中间件。在该类的$middleware属性中定义全局中间件,该中间件将在所有请求上运行,如下所示:

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \App\Http\Middleware\MyMiddleware::class,
];

也可以在$routeMiddleware属性中定义中间件,以供路由使用:

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'my' => \App\Http\Middleware\MyMiddleware::class,
];

定义完成后,可以在路由注册中查看它们:

Route::get('/', function () {
    //
})->middleware('my'); // 使用my中间件

Route::group(['middleware'=>'auth'], function(){
    // 使用auth中间件
});
使用中间件

Laravel提供了一个方便的方式来指定HTTP请求和资源:Route::group方法。在Route::group中,您可以指定中间件:

Route::group(['middleware'=>'my'], function() {
    Route::get('/', function() {
        return view('welcome');
    });
});

仅使用中间件的响应不够有趣,让我们尝试一些更有趣的东西:

Route::group(['middleware'=>'my'], function() {
    Route::get('/', function() {
        return 'hello world';
    });

    Route::get('about', function() {
        return 'about me';
    });
});

当您尝试访问这些路由时,会看到根路由和关于路由的响应。现在,让我们尝试将响应视图中的所有内容放入中间件:

public function handle($request, Closure $next) {
    $response = $next($request);
    $content = $response->getContent();
    $content = str_replace('hello', 'goodbye', $content);
    $response->setContent($content);
    return $response;
}

现在,所有针对我们中间件路由的响应都从hello world更改为goodbye world

结论

Laravel提供了非常方便且易于使用的中间件,您可以使用它来扩展应用程序的功能和维护HTTP请求的流程。在本文中,我们讲解了如何注册和使用中间件,如何通过中间件过滤HTTP请求,以及如何在响应中使用中间件来更改内容。我希望这篇文章能够帮助您更好的理解Laravel中间件。