使用自定义输出方法时的代码点火器页面缓存(_O)


Codeigniter page cache when using custom _output method

我想缓存我的页面,这可以通过使用:来完成

$this->output->cache(n)

与文档中一样,我可以在控制器中使用一个名为_output的自定义输出方法。

问题是,当我在控制器中创建这个_output方法时,它不会创建任何缓存文件,只显示输出。我查看了Output核心类,发现如果它没有找到任何具有_Output的方法,它只是echo内容。

他们在文档中有这个,在我的输出中使用:

if ($this->output->cache_expiration > 0)
{
   $this->output->_write_cache($output);
}

但无法访问cache_expiration。。。

您有2解决此问题的方法,

  1. 您可以编辑核心文件并使其成为cache_expiration公共而不是受保护并扰乱核心文件(肮脏的方式
  2. 或者可以扩展CI_Output类(更好

application/core中创建一个文件名MY_Output.phpMY_前缀位于application/config/config.php文件的$config['subclass_prefix']选项中。,

然后放一小段代码:

class MY_Output Extends CI_Output{
    public $the_public_cache_expiration_ = 0;
    public function get_cache_expiration()
    {
        $this->cache_expiration_ = $this->cache_expiration;
    }
}

我们正在做的是扩展CI_Output类,并添加我们自己的方法,当调用方法get_cache_expiration()时,它将把cache_expiration分配给the_public_cache_expiration_,在您的_output上使用它。

使用以下方法进行测试:

public function _output($output)
    {
        $this->output->get_cache_expiration();
        echo '<pre>';
        print_r($this->output->the_public_cache_expiration_);//get only our cache expiration
        echo '<hr>';
        print_r($this->output);//print the whole Output class
    }   

优点:

  1. 我们没有把核心文件搞砸
  2. 我们可以稍后向我们的子类添加更多功能

这是使用的基本_output方法

public function _output($output)
    {
        $this->output->get_cache_expiration();
        if($this->output->cache_expiration_ > 0)
        {
            $this->output->_write_cache($output);
        }
        echo $output;
    }