主页/PHP笔记/PHP问答/框架Laravel/如何在 Laravel 中给路由分配中间件

如何在 Laravel 中给路由分配中间件

Bug编译狮

Bug编译狮

在 Laravel 中,你可以通过 Route::middleware 方法来为特定的路由分配中间件。中间件是 Laravel 用于处理请求生命周期中的不同阶段的过滤器。以下是如何在 Laravel 中给路由分配中间件的基本步骤:

1. 创建中间件

首先,你需要创建一个新的中间件。如果你还没有创建中间件,可以使用 Artisan 命令:

php artisan make:middleware MyMiddleware

这将生成一个名为 MyMiddleware.php 的文件。

2. 编辑中间件

打开 app/Http/Middleware/MyMiddleware.php 文件,并编写中间件逻辑。例如:

namespace AppHttpMiddleware;

use Closure;
use IlluminateSupportFacadesAuth;

class MyMiddleware
{
    public function handle($request, Closure $next)
    {
        // 检查用户是否登录
        if (!Auth::check()) {
            return redirect('/login');
        }

        // 继续执行下一个中间件或控制器方法
        return $next($request);
    }
}

3. 注册中间件

接下来,你需要注册这个中间件到 Laravel 的服务提供者中。编辑 app/Providers/AppServiceProvider.php 文件,找到 register 方法,并添加以下行:

protected function register()
{
    // 其他服务提供者的注册代码...

    // 注册中间件
    $this->app->singleton(AppHttpMiddlewareMyMiddleware::class);
}

4. 路由配置

最后,你可以使用 Route::middleware 方法来为特定的路由分配中间件。例如,如果你想为所有访问 /admin 端点的请求分配 MyMiddleware 中间件,可以在 routes/web.php 或其他路由文件中这样做:

use AppHttpMiddlewareMyMiddleware;

Route::get('/admin', function () {
    return view('admin.dashboard');
})->middleware(MyMiddleware::class);

示例代码

以下是一个完整的示例,展示了如何创建、注册和使用中间件:

1. 创建中间件

php artisan make:middleware MyMiddleware

2. 编辑中间件

namespace AppHttpMiddleware;

use Closure;
use IlluminateSupportFacadesAuth;

class MyMiddleware
{
    public function handle($request, Closure $next)
    {
        // 检查用户是否登录
        if (!Auth::check()) {
            return redirect('/login');
        }

        // 继续执行下一个中间件或控制器方法
        return $next($request);
    }
}

3. 注册中间件

// app/Providers/AppServiceProvider.php
protected function register()
{
    // 其他服务提供者的注册代码...

    // 注册中间件
    $this->app->singleton(AppHttpMiddlewareMyMiddleware::class);
}

4. 路由配置

// routes/web.php
use AppHttpMiddlewareMyMiddleware;

Route::get('/admin', function () {
    return view('admin.dashboard');
})->middleware(MyMiddleware::class);

通过这些步骤,你就可以在 Laravel 中为路由分配中间件了。希望这对你有帮助!

黑板Bug讲师

黑板Bug讲师

介绍

Laravel中的中间件是一个强大的功能,允许您过滤进入应用程序的HTTP请求。本教程将指导您如何在您的Laravel应用程序中创建和分配中间件到路由。无论是为了认证、日志记录、CORS还是任何其他目的,Laravel的中间件都胜任。

理解中间件

在Laravel中,中间件提供了一个方便的方法来检查和过滤HTTP请求。你可以使用中间件执行诸如验证用户身份、记录请求、处理CORS等任务,在应用程序被处理之前或响应被发送到浏览器之后进行。

创建中间件

php artisan make:middleware CheckAge

该命令会在中间件类中创建一个新的类。app/Http/Middleware目录。

定义中间件逻辑

编辑刚刚创建的。CheckAge.php已收到指令,等待您的问题。

public function handle($request, Closure $next) 
   if (age < 18) {     return redirect('home');   }   return $next($request); }

该示例检查用户年龄是否小于18岁,如果是,则重定向到首页。

全球中间件

注册中间件到app/Http/Kernel.php通过添加它到$middleware抱歉,我无法理解您的问题,请您重新描述一下您的需求。

'middleware' => [     
Illuminate
ewMiddleware"];

群组中间件

如果你想为一组路由使用某些中间件,可以在其中定义它。$middlewareGroups数组在。Kernel.php已收到,请提供需要翻译的内容。

$middlewareGroups = [   'web' => [      
AppHttpMiddleware
ewMiddleware],   'api' => [      

ewMiddleware'     ],];

路由中间件

为了为特定的路由分配中间件,首先需要在您的代码中注册它。app/Http/Kernel.php文件。

protected $routeMiddleware = [ 
   'age' => 
AppHttpMiddleware
ewMiddleware'];

一旦注册,您就可以使用它。middleware在你的应用中为中间件分配路由的方法是?routes/web.php哦,对了。routes/api.php文件。

Route::get('/profile', function () {    
       // Only called if age middleware allows   
 })->middleware('age');

这只会执行闭包。/profile如果年龄中间件允许,路由。

参数化中间件

你可以向中间件传递参数:

Route::get('/post/{post}', function (AppModelsPost $post) {}
)->middleware('role:editor');

这条路线仅对具有“编辑”角色的用户开放。

中间件优先级

有时你需要指定中间件的执行顺序。在你的Kernel.php您可以在其中修改。$middlewarePriority实现这一目标需要数组。

基于闭包的中间件

对于快速、简单的检查,可以在路由中直接使用闭包定义中间件。

Route::get('admin/profile', function () {
    // Your logic here
})->middleware(function ($request, $next) { 
    // Your validation logic here
    return $next($request);
});

此检查在路由定义中直接针对已登录的用户进行。

测试中间件

在设置中间件后,你应该测试以确保它工作正常。Laravel 提供了用于测试 HTTP 路由的功能测试设施。

$response = $this->get('/route');
$response->assertStatus(403);

如果中间件限制访问,状态检查应该验证正确的错误代码。

结论。

正确地在Laravel中应用中间件有助于保持应用程序的安全和高效。本指南带你定义、注册并应用中间件到你的路由。中间件可以简化你的应用程序逻辑,为你的Laravel应用程序提供额外的HTTP请求控制层。

长工码奴1523

长工码奴1523

在 Laravel 中给路由分配中间件,你可以通过以下步骤进行:

  1. 首先确保安装了 Laravel 的依赖库,并且已经设置了环境变量。

  2. 创建一个新的控制器,例如 Controller.php

  3. 在控制器的类上添加中间件:

<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;
use AppJobsJobJob;

class Controller extends IlluminateRoutingController
{
    protected $middleware = ['auth', 'role:admin'];

    public function index()
    {
        return view('welcome');
    }
}

在这个例子中,我们为控制器创建了一个名为 authrole:admin 的中间件。这两个中间件分别用于验证用户的身份和检查是否有管理员权限。

  1. config/app.php 文件中配置中间件:
return [
    // ...
    'providers' => [
        AppProvidersAppServiceProvider::class,
        AppProvidersAuthServiceProvider::class,
        IlluminateFoundationSupportProvidersAuthServiceProvider::class,
        AppProvidersRouteServiceProvider::class,
        IlluminateBroadcastingBusServiceProvider::class,
        IlluminateQueueQueueServiceProvider::class,
        IlluminateMailMailServiceProvider::class,
        IlluminatePaginationPaginatorServiceProvider::class,
        IlluminateRedisRedisServiceProvider::class,
        IlluminateSessionSessionServiceProvider::class,
        IlluminateAuthAuthServiceProvider::class,
        IlluminateDatabaseDatabaseServiceProvider::class,
        IlluminateHashingHashServiceProvider::class,
        IlluminateFilesystemFilesystemProvider::class,
        IlluminateConfigRepositoryServiceProvider::class,
        IlluminateLogLogServiceProvider::class,
        IlluminateValidationValidationServiceProvider::class,
        IlluminateViewViewServiceProvider::class,
        IlluminateCacheCacheServiceProvider::class,
        IlluminateNotificationsNotificationServiceProvider::class,
        IlluminateSessionMiddlewareStartSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateViewMiddlewareShareErrorsFromSession::class,
        IlluminateRoutingMiddlewareSubstituteBindings::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateSessionMiddlewareAuthenticateSession::class,
        Illuminate.Session