在标题菜单中显示我的购物车会话的产品,我将会话“购物车”从我的控制器传递到我的视图,如下所示:
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 ??
感谢您的帮助!
答案 0 :(得分:2)
答案 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