php 如何在Opencart 2 - Redis中添加新方法

os8fio9y  于 11个月前  发布在  PHP
关注(0)|答案(2)|浏览(88)

为什么当我尝试在任何控制器中调用$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));
        }
    }

字符串

vd8tlhqk

vd8tlhqk1#

由于方法'keys'存在于system\library\cache\redis.php中,因此必须在system\library\cache.php中添加相同方法,然后可以从任何地方调用'keys'方法,如$this->cache->keys('*')

tktrz96b

tktrz96b2#

你可以,但最好不要这样做。我将解释我的推理,但首先要澄清cache对象如何在OC上工作:
当你调用$this->cache->SOME_METHOD_NAME时,cache对象实际上位于这里:system/library/cache.php的值。
这个类在初始化时接受一个缓存驱动程序(或适配器或类型)类作为参数,它实际上是该高速缓存引擎类型的不同实现。例如,在OC 2上,默认情况下有apcfilemem缓存适配器,位于system/library/cache/文件夹中。
您可以通过更改以下条目来更改存储使用该高速缓存类型:
$_['cache_type'] = 'file'; // apc, file or mem
default.php配置文件中,可以在system/config/上找到。
初始化发生在system/文件夹中的framework.php文件上,如下所示:

// Cache 
$registry->set('cache', new Cache($config->get('cache_type'), $config->get('cache_expire')));

字符串
所有这些类都有自己的方法实现,这些方法都是在system/library/cache.php上定义的。即getsetdelete。这样我们就可以更改该高速缓存适配器,而不需要在我们或第三方扩展调用缓存对象的代码中更改任何内容!
现在我们已经了解了cache对象的工作方式,为了在任何控制器中使用keys方法,您需要在system/library/cache.php类中使用keys方法。
但是,其他缓存适配器也没有keys方法,这意味着,如果您在核心cache类中进行更改,则如果不首先向它们添加keys方法,则无法更改缓存类型,这可能对它们没有任何意义。
最后,你应该考虑一下你是否真的需要在你的redis适配器中使用keys方法。
例如,在最新的OC v3.x.x.x中,默认情况下有一个redis适配器,并且只使用常见的缓存方法getsetdelete。您可以在这里查看:https://github.com/opencart/opencart/blob/3.0.3.8/upload/system/library/cache/redis.php

相关问题