【发布时间】:2014-09-08 17:52:31
【问题描述】:
有没有一种干净的方法来确定当前的缓存引擎是否支持 Laravel 中的tags?我们依赖一个需要tags 支持的开源模块/ServiceProvider,我想确保我们的系统是防弹的,这样切换缓存引擎不会导致致命错误。
现在,如果用户的系统配置了文件或数据库缓存引擎,则以下代码
Cache::tags([]);
抛出错误
Illuminate\Cache\FileStore没有方法tags
如果用户的系统配置了 memcached 或 redis 之类的东西,则代码可以正常运行。
有没有办法干净地检测当前配置的缓存引擎是否支持标签?我能想到的最好的是
$app = app();
$has_tags = method_exists($app['cache']->driver()->getStore(), 'tags');
但是对于配置了cache 服务、缓存服务用户使用“驱动程序”、驱动程序用户使用“存储”以及@987654328 @ 方法不是为了另一个目的。
我还考虑过将对 Cache::get 的调用包装在 try/catch 中,但后来我依赖 Laravel 的“为 PHP 错误抛出异常”行为在未来版本中不会改变。
我是否缺少明显的解决方案?
【问题讨论】:
-
参考:也可以直接调用Cache::getStore()获取store,即
method_exists(Cache::getStore(), 'tags')