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

Laravel视图中如何直接获取缓存数据?无需传参实现全局访问

在Laravel 5.5中全局(含Blade视图)直接访问缓存数据的可行方案

当然可行!你已经在Service Provider里用Cache::rememberForever()完成了数据的永久缓存,现在只需要让Blade视图能直接调用这部分缓存,或者把它处理成全局可用的形式就行,下面给你几个实用的方案:

方案1:直接在Blade中调用Cache门面

这是最省心的方式,Laravel的门面在视图环境里是全局可用的,不需要额外配置,直接在Blade模板里写:

{{ Cache::get('user')['name'] }}
{{ Cache::get('user')['age'] }}

如果担心缓存不存在导致报错,可以加上默认值做兼容:

{{ Cache::get('user', [])['name'] ?? '默认名称' }}

方案2:在Service Provider中共享全局视图变量

要是觉得每次写Cache::get()有点繁琐,你可以在DataServiceProvider的boot()方法里,把缓存数据共享给所有视图:

class DataServiceProvider extends ServiceProvider {
    public function boot() {
        $user = Cache::rememberForever('user', function () {
            return array('name' => 'jack', 'age' => 25);
        });
        // 将缓存的user数据共享给所有视图,视图中直接用$globalUser变量
        view()->share('globalUser', $user);
    }

    public function register() {
        //
    }
}

之后在Blade里就能直接使用变量:

{{ $globalUser['name'] }}
{{ $globalUser['age'] }}

方案3:自定义全局辅助函数

如果想要更简洁的调用语法,还可以创建一个自定义辅助函数:

  1. 在项目根目录的app文件夹下新建Helpers目录,再创建CacheHelpers.php文件:
<?php

if (!function_exists('get_global_user')) {
    function get_global_user() {
        return Cache::get('user', []);
    }
}
  1. 修改项目根目录的composer.json,在autoload区块里添加这个文件的路径:
"autoload": {
    "classmap": [
        "database/seeds",
        "database/factories"
    ],
    "psr-4": {
        "App\\": "app/"
    },
    "files": [
        "app/Helpers/CacheHelpers.php"
    ]
}
  1. 运行composer dump-autoload命令,让Composer加载这个辅助函数。
    之后在Blade里就能直接调用函数:
{{ get_global_user()['name'] }}

这几个方案都能实现「缓存仅存储一次,全局无需额外步骤直接访问」的需求,你可以根据自己的使用习惯选择~

内容的提问来源于stack exchange,提问作者SoheilYou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:15:27