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()
{
}
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()
{
}