资讯专栏INFORMATION COLUMN

[教程] 大白话 Laravel 中间件

ThinkSNS / 3243人阅读

摘要:它包含三个主要的中间件组和应用程序的全局中间件。这些中间件在应用程序的每个请求期间运行。使得可以在组中注册中间件,从而更容易通过使用组名将大量中间件附加到路由。典型示例是将每个用户分配给角色,中间件检查用户的角色以确定是否有权访问所请求的。

文章转自:https://learnku.com/laravel/t... 
Laravel 中间件是什么?

简而言之,中间件在 laravel 中的作用就是过滤 HTTP 请求,根据不同的请求来执行不同的逻辑操作。

我们可以通过中间件实现以下功能:

指定某些路由

设置 HTTP 响应头

记录请求

过滤请求的参数

决定是否启用站点维护模式

响应前后做一些必要的操作

自定义中间件

命令行执行下面的简单命令,就可以轻松创建一个新的中间件

php artisan make:middleware 
//MiddlewareName 就是你要创建的中间件的名字

执行上面的命令,Laravel 会在 app/Http/Middleware 目录下自动创建一个只包含 handle 方法的中间件。


在中间件被调用的时候,handle 方法就会执行。这里需要注意的是 handle 方法默认有两个参数  $request 和 $next 。 $request 用来接受应用的请求组求, $next 将请求传递给应用程序。这两个参数是 handle 必不可少的!中间件也包括前置中间件和后置中间件。

“前置中间件” 顾名思义在将请求转发到应用程序之前处理一些逻辑。 另一方面,在中间件之后,在应用程序处理了请求并生成响应之后运行。

前置中间件:


后置中间件:


中间件的类别

全局中间件

路由中间件

全局中间件针对命中应用程序的每个请求运行。 Laravel 自带了大多数这些中间件例如 ValidatePostSizeTrimStrings,CheckForMaintenanceMode 等等.

路由中间件仅在它们所连接的路由上运行
例如  redirectIfAuthenticated.

注册中间件

创建的任何中间件都必须注册,因为这是 Laravel 知道存在的唯一方式。 要注册中间件,只需打开名为 kernel.php 的文件,该文件位于 Http 文件夹中,如下所示:

This file contains list of all registered middlewares that come with Laravel by default. it contains three major arrays which
此文件包含默认 Laravel 提供的所有已注册中间件的列表。 它包含三个主要的中间件组 $middleware , $middlewareGroups 和 $routeMiddleware

 [
            AppHttpMiddlewareEncryptCookies::class,
            IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
            IlluminateSessionMiddlewareStartSession::class,
            // IlluminateSessionMiddlewareAuthenticateSession::class,
            IlluminateViewMiddlewareShareErrorsFromSession::class,
            AppHttpMiddlewareVerifyCsrfToken::class,
            IlluminateRoutingMiddlewareSubstituteBindings::class,
        ],
        "api" => [
            "throttle:60,1",
            "bindings",
        ],
    ];
    /**
     * 应用程序的路由中间件.
     *
     * 可以将这些中间件分配给组或多带带使用。
     *
     * @var array
     */
    protected $routeMiddleware = [
        "auth" => IlluminateAuthMiddlewareAuthenticate::class,
        "auth.basic" => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class,
        "bindings" => IlluminateRoutingMiddlewareSubstituteBindings::class,
        "can" => IlluminateAuthMiddlewareAuthorize::class,
        "guest" => AppHttpMiddlewareRedirectIfAuthenticated::class,
        "throttle" => IlluminateRoutingMiddlewareThrottleRequests::class,
        //the just created middlware
        "superadmin" => AppHttpMiddlewareRedirectIfSuperAdmin::class, 
    ];
}

 $middleware 数组包含全局中间件,它运行应用程序的每个HTTP请求,所以如果你想为每个请求运行一个中间件,你应该在这里注册它。  $middlewareGroups 使得可以在组中注册中间件,从而更容易通过使用组名将大量中间件附加到路由。 $routeMiddleware 数组包含各个注册的路由中间件。

分配中间件

有两个主要方法可以把注册好的中间件应用到路由中。

通过控制器的构造方法

通过路由

通过构造方法分配中间件

通过构造方法分配中间有很大的灵活性,它提供了两个重要的方法except($parameters) 和 only($parameters),这两个方法可以允许或阻止中间件应用到控制器中的辅助方法。不使用这两个方法,中间件将使用与控制器的每个方法。

middleware("auth");
    }

    public function viewForum(){

      return view("index");
    }

    public function edit($id){

    }

    public function delete($id){

    }

}

使用 except 和 only 方法我们可以选择把中间件应用到指定方法。

middleware("auth")->except(["viewForums", "viewForumDetails"]);
    }

    public function viewForums(){

      return view("index");
    }

    public function edit($id){

    }

    public function delete($id){

    }

    public function viewForumDetails(){

    }
}
通过路由分配中间件

如果注册的中间件可以直接附加到路由,如下所示:

middleware("auth");

/**方法 2
或者像这样使用完全限定的类名:
*/
use AppHttpMiddlewareCheckAge;

Route::get("admin/profile", function () {
    // action
})->middleware(CheckAge::class);

//方法 3
Route::group(["middleware" => ["web"]], function () {
    //action
});

N:B 中间件组可以像单个中间件一样分配给路由

中间件参数

其他参数可以传递给中间件。 典型示例是将每个用户ID分配给角色,中间件检查用户的角色以确定是否有权访问所请求的 URI。 参数可以传递给中间件,如下所示:

middleware("auth:"); // 这里应该被用户想要传递的任何参数替换。

//方法2 (Through a controller)
use IlluminateHttpRequest;

class ForumController extends Controller
{

    public function __construct(){
        $this->middleware("auth:");
    }
  }

通过用逗号分隔每个参数,可以将多个参数传递给中间件。

middleware("auth:,,"); //, ,  这里应该被用户想要传递的任何参数替换。

这些参数在 $next 变量之后传递给中间件的 handle 函数


总结

要创建中间件,请执行以下过程

使用 artisan 命令创建中间件 php artisan make:middleware 中间件名.

在app→Http文件夹中的 kernel.php 中注册中间件

在创建的中间件中编写逻辑

将中间件分配给路由或控制器

Conclusion

Laravel中间件可以更轻松地保护我们的路由,过滤输入并完成许多其他工作,而无需编写如此多的逻辑。 查看官方 Laravel 文档 这里 了解中间件的更多功能,最重要的是练习。

文章转自:https://learnku.com/laravel/t... 

更多文章:https://learnku.com/laravel/c...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31252.html

相关文章

  • Laravel 5.4 入门系列 13. 终篇: 小白也能看懂的 Laravel 核心概念讲解

    摘要:但是服务通常由服务提供者来管理的。小结通过上述的例子,基本上可以理解服务容器和服务提供者的使用。懂得了服务容器和服务提供者,理解门面也就不难了。 自动依赖注入 什么是依赖注入,用大白话将通过类型提示的方式向函数传递参数。 实例 1 首先,定义一个类: /routes/web.php class Bar {} 假如我们在其他地方要使用到 Bar 提供的功能(服务),怎么办,直接传入参数即...

    BenCHou 评论0 收藏0
  • Laravel 深入核心系列教程

    摘要:前言年底了不太忙,最近一段时间也一直在研究,就想写篇关于比较深一点的教程系列啥的,于是就找到站长给开了写教程的渠道。优点的就是为艺术家创造的框架,它也是工程化的趋势。项目维护方便也是事实。如果有遇到问题可以直接在教程下面留言。 前言 年底了不太忙,最近一段时间也一直在研究laravel,就想写篇关于laravel比较深一点的教程系列啥的,于是就找到站长给开了写教程的渠道。由于第一次写,...

    wemall 评论0 收藏0
  • windows下laravel5.5手写教程2路由Eloquent ORM操作(适合初学者)

    摘要:一路由目录众所周知,对于我们熟知的任何一款框架,例如路由系统都是极其重要的存在。文件用于定义界面的路由。定义在中的路由都是无状态的,并且被分配了中间件组。生成的控制器为每个行为保留了方法,同时还包括了处理动作和的声明注释。 一、路由目录 众所周知,对于我们熟知的任何一款PHP框架,例如TP、CI、YII、路由系统都是极其重要的存在。 对于laravel框架也一样,对于数据库的操作,无非...

    BlackFlagBin 评论0 收藏0
  • 个人整理, 阅读过的好文章 (每天随时更新)

    摘要:大家有好的文章可以在评论下面分享出来共同进步本文链接数组使用之道程序员进阶学习书籍参考指南教你在不使用框架的情况下也能写出现代化代码巧用数组函数框架中间件实现没错,这就是面向对象编程设计模式需要遵循的个基本原则令人困惑的在中使用协程实现多任 大家有好的文章,可以在评论下面分享出来, 共同进步! 本文github链接 php PHP 数组使用之道 PHP程序员进阶学习书籍参考指南 教你...

    Chiclaim 评论0 收藏0
  • laravel框架应用和composer扩展包开发

    摘要:官方地址是目前最流行的框架,发展势头迅猛,应用非常广泛,有丰富的扩展包可以应付你能想到的各种应用场景,框架思想前卫,跟随时代潮流,提倡优雅代码,自称为工匠,其中的模板引擎容器以及扩展包为业务的开发提供了极大的便利。 laravel5.5+ laravel官方地址 laravel是目前最流行的php框架,发展势头迅猛,应用非常广泛,有丰富的扩展包可以应付你能想到的各种应用场景,lara...

    shevy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<