Laravel Package无法访问会话

时间:2016-02-25 23:02:47

标签: php laravel

我正在为cms系统开发一个laravel包。我最初在laravel 5.1中构建它并且它工作正常但现在我已经尝试在5.2上使用它并且我遇到了会话数据的问题。

我面临的问题是由于某种原因,我的包内的控制器无法访问会话数据。

使用composer psr4包含包。

以下是我的服务提供商加载我的包裹路线的启动方法:

// Include routes
if (!$this->app->routesAreCached()) {
    require __DIR__ . DIRECTORY_SEPARATOR . 'coreRoutes.php';
}

这是我正在测试的路线之一:

Route::get('manager', [
    'as' => 'manager',
    'uses' => 'Cms\Controllers\CmsController@administrationPanel',
]);

这是控制器内的administrationPanel方法:

public function administrationPanel()
{
    var_dump(\Session::all());
    return view('Cms::front');
}

所以使用这个var_dump我得到一个空数组。但是如果我在其中一个app控制器中使用var_dump,我会得到一个填充数组。

有谁知道为什么包控制器无法访问普通app控制器可以访问的会话数据?

我是否按错误的顺序装货?

1 个答案:

答案 0 :(得分:3)

自Laravel 5.2以来,StartSession中间件已从全局$middleware列表移至App\Http\Kernel.php中的web中间件组。这意味着如果您需要路由的会话访问权限,则可以使用该中间件组。所以你的路线定义如下:

Route::get('manager', [
    'middleware' => 'web',
    'as' => 'manager',
    'uses' => 'Cms\Controllers\CmsController@administrationPanel',
]);

如果您不希望/需要添加到该组的所有其他中间件(加密的Cookie,CSRF令牌验证等),您可以设置一个简单的路由中间件,仅用于会话:

protected $routeMiddleware = [
    ...
    'session' => \Illuminate\Session\Middleware\StartSession::class,
];

使用此功能,您可以使用session代替web作为路由中间件。