如何在laravel中的服务提供者中检索会话数据?

时间:2016-01-03 15:05:15

标签: php laravel-5.1

我正在开发一个Laravel项目。我正在使用Laravel 5.1。在我的项目中,我以这种方式在appServiceProvider的引导方法中将数据共享到所有视图。

function boot()
{
    $items = $this->itemRepo->getItems(session("key"));
    view()->share('items', array('items'=>$items));
}

但会话值始终为null。我在网上看了很多文章。但他们没有工作。所以我该如何将会话价值传递给那里?

3 个答案:

答案 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