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:自定义全局辅助函数
如果想要更简洁的调用语法,还可以创建一个自定义辅助函数:
- 在项目根目录的
app文件夹下新建Helpers目录,再创建CacheHelpers.php文件:
<?php if (!function_exists('get_global_user')) { function get_global_user() { return Cache::get('user', []); } }
- 修改项目根目录的
composer.json,在autoload区块里添加这个文件的路径:
"autoload": { "classmap": [ "database/seeds", "database/factories" ], "psr-4": { "App\\": "app/" }, "files": [ "app/Helpers/CacheHelpers.php" ] }
- 运行
composer dump-autoload命令,让Composer加载这个辅助函数。
之后在Blade里就能直接调用函数:
{{ get_global_user()['name'] }}
这几个方案都能实现「缓存仅存储一次,全局无需额外步骤直接访问」的需求,你可以根据自己的使用习惯选择~
内容的提问来源于stack exchange,提问作者SoheilYou
相关产品推荐
相关产品推荐

