Laravel 包无法访问会话

Ash*_*ham 4 php laravel

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

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

该软件包是使用 Composer psr4 包含的。

这是我的服务提供商加载我的包裹路由的引导方法:

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

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

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

这是控制器内的 AdministrationPanel 方法:

public function administrationPanel()
{
    var_dump(\Session::all());
    return view('Cms::front');
}
Run Code Online (Sandbox Code Playgroud)

所以通过这个 var_dump 我得到一个空数组。但是,如果我在其中一个应用程序控制器内进行 var_dump,我会得到一个填充数组。

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

我是否以错误的顺序加载内容?

Bog*_*dan 6

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

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

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

protected $routeMiddleware = [
    ...
    'session' => \Illuminate\Session\Middleware\StartSession::class,
];
Run Code Online (Sandbox Code Playgroud)

有了这个,您可以使用session而不是web用于您的路由中间件。