【问题标题】:Laravel 5.1 - Show my session cartLaravel 5.1 - 显示我的会话购物车
【发布时间】:2016-09-27 11:52:23
【问题描述】:

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

前端控制器:

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 那样做每个视图??

感谢您的帮助!

【问题讨论】:

    标签: laravel session laravel-5.1 blade


    【解决方案1】:

    使用data sharing

    在您的AppServiceProvider 中添加boot 方法

    view()->share('cart', \Session::get('cart'));
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 大多数时候你会想要共享一个Cart 实例(它可能使用会话来存储它的项目)......但在这种情况下不是。这只是会话本身,所以这是我猜的最佳答案:)
      【解决方案3】:

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

      【讨论】:

      • 我按照你说的做了,但现在我有一个错误:为 foreach() 提供的参数无效(查看:C:\xampp\htdocs\2016\resources\views\layouts\principal.blade.php ) (查看:C:\xampp\htdocs\2016\resources\views\layouts\principal.blade.php)
      • 你将什么变量传递给foreach()?我需要更多详细信息。
      • foreach ($cart as $item) 我的会话购物车 endforeach 变量的所有项目,例如名称 product $item->name、category、数量、ecc .. 我会话“cart”的所有值可能是foreach 是错误的
      • 如果你复制粘贴了我的答案,也许你应该试试foreach ($_cart as $item)。无论如何,如果您只使用会话,则不需要视图编辑器。
      • 是的,我不需要,但也许我需要提供者来解决其他问题,我会按照你说的尝试,谢谢你的帮助!
      猜你喜欢
      • 2019-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 2011-08-18
      相关资源
      最近更新 更多