Laravel 全局中间件无法获取会话

Laravel global middleware can't get session

 protected $middleware = [
     \App\Http\Middleware\Syspoint::class,
]

use Session;
class Syspoint
{
    echo \Session::get('syspoint');
}

我需要一个中间件运行每次页面请求时,中间件都包含会话。

我放在 protected $middleware 里面,但是全局中间件无法获取会话。

您正在调用会话,但它尚未启动。

如果你需要在你的中间件中使用 Session,你必须将它放在 属性 protected $middlewareGroups 键下 web 并且在调用 StartSession 之后,即:

 protected $middlewareGroups
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \App\Http\Middleware\Syspoint::class,

dparoli 的回答正确但不完全正确!因为这个中间件会运行每个网络请求!

运行仅在某些路由下如何?方法如下;

protected $routeMiddleware = [
    'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'sys-point' => \App\Http\Middleware\Syspoint::class,
];

然后在你的路由上定义新的中间件

Route::group(['middleware' => ['web','sys-point'], 'namespace' => 'YourControllers'], function()
{
}