\ _Request :: getSession()在Controller构造中返回NULL

问题描述 投票:3回答:4

我想在每次加载页面时获取用户的会话ID,所以我在控制器构造中使用\ Request :: getSession() - > getId()但是我得到了这个错误

Call to a member function getId() on null

如果我在任何路由方法中使用相同的代码,它就可以工作。

我怎么解决这个问题?

laravel laravel-5
4个回答
0
投票

试试use Illuminate\Support\Facades\Auth; Auth::getSession()->getId();


0
投票

这是Laravel的默认功能。会话数据在构造函数中不再可用。看到:

laravel - Can't get session in controller constructor


0
投票

泰勒关于它的说法:

在构造函数中使用session或auth是非常糟糕的,因为还没有请求发生,并且session和auth固有地绑定到HTTP请求。您应该使用实际的控制器方法接收此请求,您可以使用多个不同的请求多次调用此方法。通过强制您的控制器解析构造函数中的会话或身份验证信息,您现在强制整个控制器忽略实际的传入请求,这可能会在测试时导致严重问题等。


0
投票

这对我有用:

public function __construct()
{
    // No session access from constructor work around
    $this->middleware(function ($request, $next) {
        \Request::getSession()->getId();
        return $next($request);
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.