我正在为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控制器可以访问的会话数据?
我是否按错误的顺序装货?
答案 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
作为路由中间件。