Laravel 5.1 - 显示我的会话购物车

时间:2016-05-29 16:30:44

标签: laravel session laravel-5.1 blade

在标题菜单中显示我的购物车会话的产品,我将会话“购物车”从我的控制器传递到我的视图,如下所示:

FrontController:

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

我的问题:

有一种方法可以将购物车会话直接传递给我的所有观点吗?或者我必须总是为每个视图传递购物车会话?我有大约24个视图,我必须做每个视图,如我的视图主页index.php ??

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

使用data sharing

boot

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

答案 1 :(得分:1)

对于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。我这样做,所以你知道变量是共享的,而不是由控制器传递。

答案 2 :(得分:1)

为什么要从控制器传递会话数据?会议随处可见。这应该不会从控制器传递任何东西:

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