我正在开发一个Laravel项目。我正在使用Laravel 5.1。在我的项目中,我以这种方式在appServiceProvider
的引导方法中将数据共享到所有视图。
function boot()
{
$items = $this->itemRepo->getItems(session("key"));
view()->share('items', array('items'=>$items));
}
但会话值始终为null。我在网上看了很多文章。但他们没有工作。所以我该如何将会话价值传递给那里?
答案 0 :(得分:1)
我认为您的问题在以下帖子 Laravel 5 session data is not accessible in the app boot process 中得到了解答,您应该使用 {@ 3}}中 Taylor Otwell 等中间件/ strong> 没有会话,因为没有HTTP请求。
希望这有帮助。
答案 1 :(得分:0)
这可能是一篇过时的文章,但是我在遇到相同问题的同时来到了这里,所以让我在这里发布我的解决方案,以防万一有人需要它。
public function boot()
{
view()->composer('*', function ($view)
{
$view->with('your_var', \Session::get('var') );
});
}
答案 2 :(得分:0)
我确定这是人们仍然面临的问题,并且我想它不会很快消失,但是不幸的是,有时人们似乎忘记了Laravel是基于PHP构建的,有些事情可以通过简单的方法解决。普通的PHP。
对于此问题,如果您想使用会话,我认为该请求已在以前注册了会话:
$items = $this->itemRepo->getItems(session("key"));
view()->share('items', array('items'=>$items));
密切关注!
这可以通过在 “ app / helpers.php” 之类的文件中创建助手功能来完成:
if(!function_exists('shared_items')) {
function shared_items()
{
return (new ItemRepo())->getItems(session('key'));
}
}
如果您不知道如何在现代PHP开发中包括文件,请按照以下步骤操作:
在 composer.json 中:
"autoload": {
"psr-4": {
// definitions...
},
"files": [
"app/helpers.php"
]
},
然后让Compose知道您既不会发疯也不会哭泣:
composer dumpautoload
现在必须使用以下函数来代替使用全局共享的变量:
shared_items();
就是这样!
没有魔术,也没有技巧...只是普通的旧PHP和现代最佳实践:D