为什么当我尝试在任何控制器中调用$this->cache->keys('*')
方法时,我会得到错误:未捕获错误:在/catalog/controller/product/category. php中调用未定义的方法Cache::keys()
当我在任何控制器中调用$this->cache->set($key, $value)
或$this->cache->get($key)
方法时,它们都能正常工作。
如何使方法键像set和get方法一样工作?
system\library\cache\redis.php
<?php
namespace Cache;
class Redis {
private $expire;
private $cache;
public function __construct($expire) {
$this->expire = $expire;
$this->cache = new \Redis();
$this->cache->pconnect(CACHE_HOSTNAME, CACHE_PORT);
}
public function keys($key) {
return $this->cache->keys($key);
}
public function get($key) {
return $this->cache->get(CACHE_PREFIX . $key);
}
public function set($key, $value) {
return $this->cache->set(CACHE_PREFIX . $key, json_encode($value));
}
}
字符串
2条答案
按热度按时间vd8tlhqk1#
由于方法'keys'存在于
system\library\cache\redis.php
中,因此必须在system\library\cache.php
中添加相同方法,然后可以从任何地方调用'keys'方法,如$this->cache->keys('*')
tktrz96b2#
你可以,但最好不要这样做。我将解释我的推理,但首先要澄清
cache
对象如何在OC上工作:当你调用
$this->cache->SOME_METHOD_NAME
时,cache
对象实际上位于这里:system/library/cache.php
的值。这个类在初始化时接受一个缓存驱动程序(或适配器或类型)类作为参数,它实际上是该高速缓存引擎类型的不同实现。例如,在OC 2上,默认情况下有
apc
、file
和mem
缓存适配器,位于system/library/cache/
文件夹中。您可以通过更改以下条目来更改存储使用该高速缓存类型:
$_['cache_type'] = 'file'; // apc, file or mem
在
default.php
配置文件中,可以在system/config/
上找到。初始化发生在
system/
文件夹中的framework.php
文件上,如下所示:字符串
所有这些类都有自己的方法实现,这些方法都是在
system/library/cache.php
上定义的。即get
、set
和delete
。这样我们就可以更改该高速缓存适配器,而不需要在我们或第三方扩展调用缓存对象的代码中更改任何内容!现在我们已经了解了
cache
对象的工作方式,为了在任何控制器中使用keys
方法,您需要在system/library/cache.php
类中使用keys
方法。但是,其他缓存适配器也没有
keys
方法,这意味着,如果您在核心cache
类中进行更改,则如果不首先向它们添加keys方法,则无法更改缓存类型,这可能对它们没有任何意义。最后,你应该考虑一下你是否真的需要在你的redis适配器中使用
keys
方法。例如,在最新的OC v3.x.x.x中,默认情况下有一个
redis
适配器,并且只使用常见的缓存方法get
,set
和delete
。您可以在这里查看:https://github.com/opencart/opencart/blob/3.0.3.8/upload/system/library/cache/redis.php