You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 10 如何在所有视图中共享购物车Cookie数据?

解决Laravel视图全局共享购物车Cookie数据的问题

问题原因

在ViewServiceProvider的boot方法中直接使用Cookie::get('cart')拿不到预期值,是因为此时Cookie facade还未关联当前请求的Cookie数据,它默认读取的是应用启动阶段的Cookie状态,而非当前请求携带的。而控制器中通过$request->cookie('cart')能正常获取,是因为$request是当前请求实例,已经包含了完整的请求Cookie信息。

正确实现方式

方法一:注入当前请求实例获取Cookie

修改ViewServiceProvider的boot方法,通过依赖注入获取当前请求实例,直接从请求中读取Cookie并共享给所有视图:

<?php

namespace App\Providers;

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

class ViewServiceProvider extends ServiceProvider
{
    public function boot(Request $request)
    {
        // 全局共享购物车数据到所有视图,第二个参数是默认值
        View::share('cart', $request->cookie('cart', '["abcs"]'));
    }
}

方法二:通过Request门面获取当前请求

如果不想使用依赖注入,也可以通过Request门面直接获取当前请求实例:

<?php

namespace App\Providers;

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

class ViewServiceProvider extends ServiceProvider
{
    public function boot()
    {
        $cart = Request::cookie('cart', '["abcs"]');
        View::share('cart', $cart);
    }
}

验证注意事项

  • 确保ViewServiceProvider已经在config/app.php的providers数组中注册
  • 测试时可清除浏览器缓存或使用无痕模式,避免旧Cookie干扰结果
  • Laravel会自动解密加密存储的Cookie,$request->cookie()获取到的是解密后的原始数据,无需额外处理

内容的提问来源于stack exchange,提问作者Sven van den Boogaart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 17:12:07