Laravel 中间件

Laravel 中,控制中间件 的文件 app\Http\Kernel.php

分别有以下变量

$middleware     负责全局的中间件,每一个由Laravel 启动的url 都会经过此中间件

最近查看旧项目的时候,发现在$middleware 中添加了  \Illuminate\Session\Middleware\StartSession::class 有个小问题。session 用put() 保存的时候会有长度限制,超出长度就会停止再继续保存,如果只是记录登录的用户信息,这个倒影响不大,如果用来写购物车就出问题了,购物车的session 会不断变大最终导致无法保存完整!

$middleware 移除StartSession 后,会导致__construct() 中无法读取session,查过相关文章,大概说,__construct()  比 $middleware更加早执行,所以在__construct()中无法读取session 的原因。可能可以再自定义的中间件中读取,具体还没测试过!

 

$middlewareGroups    针对路由的中间件,里面有web 和api 的变量,分别对应 路由中web 和api 的文件

 

$routeMiddleware    自定义一个中间件的名称及路径,可以单独配置到一个 Controller 或者url 上。

例如:在路由中,将中间件配置到/index  的路径上

Route::get('/index', 'TestController@index')->middleware('test3');

也可以将中间件配置到Controller 上,如:

    public function __construct(){
    	$this->middleware('test3');
    }

$this->middleware() 测试了一下,只能放在构造函数__construct() 中,如果写在其他function 里面,就无法工作

 

测试 $middleware  $middlewareGroups  $routeMiddleware   $middlewarePriority 优先级

$middleware > $middlewareGroups > $routeMiddleware

 

$middlewarePriority 是一个优先级的设置,负责设置 $middlewareGroups 的优先级

举例:

    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\Test1Middleware::class,
            \App\Http\Middleware\Test2Middleware::class,
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,

        ],

        'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];

我在web 中,新增了Test1Middleware 和 Test2Middleware ,执行的顺序,应该是先Test1,然后再到Test2 的

如果我在$middlewarePriority 中修改一下,如下:

    protected $middlewarePriority = [
        \App\Http\Middleware\Test2Middleware::class,
        \App\Http\Middleware\Test1Middleware::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\Authenticate::class,
        \Illuminate\Routing\Middleware\ThrottleRequests::class,
        \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \Illuminate\Auth\Middleware\Authorize::class
    ];

Test2 摆在第一位,Test1在第二位,在执行的时候,系统就会先执行Test2的

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值