Laravel 5.1 - 显示我的 session 购物车

Laravel 5.1 - Show my session cart

为了在 header 菜单中显示我的购物车 session 中的产品,我将 session "cart" 从我的控制器传递到我的视图,如下所示:

前端控制器:

public function index()
    {
        $cart = \Session::get('cart');

        return view('index',compact('cart'));
    }

Routes.php

Route::get('/','FrontController@index');

我的布局principal.blade.php(效果很好)

@foreach ($cart as $item)

all items of my session cart

@endforeach

我的问题:

有一种方法可以将购物车 session 直接传递到我的所有视图??或者我必须始终为每个视图传递购物车 Session?我有大约 24 个视图,我必须像我的视图主页一样进行每个视图 index.php ??

感谢您的帮助!

使用data sharing

AppServiceProvider

中添加到 boot 方法
view()->share('cart', \Session::get('cart'));

对于 Laravel 的 View Composers 来说,这是一份完美的工作。

创建一个新的服务提供者,我们称之为ComposerServiceProvider:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        // Share $_cart to every view
        view()->composer('*', function ($view) {
            view()->share('_cart', \Session::get('cart'));
        });
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

不要忘记在 config/app.php 内添加服务提供商。您还可以仅通过替换 * 通配符将变量组合到特定视图。

您可能注意到我在变量中添加了下划线前缀 _cart。我这样做是为了让您知道该变量是共享的,而不是由控制器传递的。

为什么要从控制器传递 session 数据?会议随处可见。这应该可以在不从控制器传递任何东西的情况下工作:

@foreach (session()->get('cart') as $item)
    all items of my session cart
@endforeach