首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从父控制器w/o访问会话数据,并将其传入

从父控制器w/o访问会话数据,并将其传入
EN

Stack Overflow用户
提问于 2019-07-08 20:20:24
回答 1查看 247关注 0票数 0

我可以从Controller访问会话数据,而无需传递来自MyController的请求

代码语言:javascript
运行
复制
class Controller extends BaseController
{
    public function __construct()
    {
        // ** next line throws error:
        // "Session store not set on request."
        $userdata = request()->session()->get('userdata');

        // I want to inject `userdata` into every template without
        // passing data from child controllers.
        view()->share(['userdata' => $userdata);
    }
}

class MyController extends Controller
{
    public function __construct(Request $request)
    {
        // This works, so the data is in fact in the session.
        // I don't want to pass it, or `$request` to the parent from here.
        $userdata = $request->session()->get('userdata');
        ...
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-08 21:09:14

它不能在您的__construct()方法中工作的原因是因为StartSession中间件尚未运行。

要解决这个问题,只需在控制器上使用middleware()方法:

代码语言:javascript
运行
复制
public function __construct()
{
    $this->middleware(function ($request, $next) {

        $userdata = $request->session()->get('userdata');

        view()->share(compact('userdata'));

        return $next($request);
    });
}

Laravel 5.3升级指南 (向下滚动控制器部分)

在Laravel5.3中,您无法访问控制器构造函数中的会话或经过身份验证的用户,因为中间件尚未运行。 作为一种选择,您可以直接在控制器的构造函数中定义基于闭包的中间件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56942059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档