将中间件中带有会话的变量传递到主Laravel中的刀片文件

时间:2019-05-17 22:22:20

标签: laravel

目前,我正在尝试共享一个使用Session ID的变量,

$currentSessionID = session()->getId();
$inCartDetails = Cart::where('session_id', $currentSessionID)->get();
View::share('inCartDetails', $inCartDetails);

我已将其放置在AppServiceProvider的启动中,但由于“在应用启动过程中无法访问会话数据,因此应使用Taylor在添加事件中使用Taylor Otwell这样的中间件进行会话启动的对话”。

我按照它说的那样创建了一个称为CommonData的中间件

public function handle($request, Closure $next)
{
    $currentSessionID = session()->getId();
    $inCartDetails = Cart::where('session_id', $currentSessionID)->get();
    View::share('inCartDetails', $inCartDetails);
    // return $next($request);
}

如何在所有视图中全局使用的标头中使用来自middeware的此变量?标题本身没有控制器,因为它包含在主刀片中。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

为什么不使用session()帮助程序将$inCartDetails存储在可变会话中?

要设置可变会话:

session(['inCartDetails' => $inCartDetails]);

要检索项目中任何位置的变量会话(路线,控制器和视图):

echo session('inCartDetails'); // or {{ session('inCartDetails') }} for blade views