首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >发送变量以在中间件中终止

发送变量以在中间件中终止
EN

Stack Overflow用户
提问于 2019-01-02 14:04:49
回答 3查看 647关注 0票数 2

我正在尝试从路由发送一个变量来终止中间件:

Route::group(['middleware' => 'checkUserLevel'], function () {
    // my routes
});

我可以在中间件句柄中获取checkUserLevel,但我也需要在terminate方法中访问,我该怎么办?

public function handle($request, Closure $next, $key)
{
     dd($key); // it returns variable
}

public function terminate($request, $response)
{
      //I need that variable here
}
EN

回答 3

Stack Overflow用户

发布于 2019-06-08 10:40:08

正如在documentation中提到的,如果您希望使用相同的中间件实例(因为在默认情况下,它使用的是中间件的新实例),则需要将中间件注册为单例。

您可以通过添加到ServiceProviderregister方法将其注册为单例

public function register()
{
    $this->app->singleton(\App\Http\Middleware\YourMiddleware::class);
}

然后,您可以像lorent's answer的第一个示例一样使用类的属性

protected $foo;

public function handle($request, Closure $next)
{
    $this->foo = 'bar';

    return $next($request);
}

public function terminate($request, $response)
{
    // because we cannot use `dd` here, so the example is using `logger`
    logger($this->foo);
}
票数 3
EN

Stack Overflow用户

发布于 2019-01-02 14:24:01

您可以执行以下操作:

protected $key;

public function handle($request, Closure $next, $key)
{
     $this->key = $key;
}

public function terminate($request, $response)
{
     $this->key; //access property key
}

即使这应该通过请求全局传递。像这样:

public function handle($request, Closure $next)
{
     $request->input('key');
}

public function terminate($request, $response)
{
      $request->input('key');
}

编辑:

Route::group(['middleware' => 'checkUserLevel'], function () {
    Route::get('/test/{testparam}', function () {
    });
});

public function handle($request, Closure $next)
{
     $request->route('testparam');
}

public function terminate($request, $response)
{
      $request->route('testparam');
}
票数 1
EN

Stack Overflow用户

发布于 2020-07-10 19:48:39

我知道这很古老,但是你也可以使用静态属性。这使您不必注册singleton

<?php

namespace App\Http\Middleware;

class MyMiddleware {
    private static $key;

    public function handle($request, Closure $next, $key)
    {
         self::$key = ($key); // it returns variable
    }

    public function terminate($request, $response)
    {
          $key = self::$key;
    }
}

这在我的Laravel 5.8应用程序中可以工作,我不明白为什么它在其他地方不能工作。不能说是否有任何理由不这样做,但我不知道有什么理由。

我自己使用它在我的handle函数中生成一个缓存键,并在terminate函数中重用相同的键。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54001927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档