使用自定义_output方法时Codeigniter页面缓存

时间:2014-09-11 14:31:20

标签: php codeigniter caching

我想缓存我的页面,可以通过使用:

来完成
$this->output->cache(n)

在文档中,我可以在控制器中使用自定义输出方法,名为 _output

问题是,当我在控制器中创建此_output方法时,它没有创建任何缓存文件,只显示输出。我查看了输出核心类,当我看到它没有找到 _output 的任何方法时,它只是回显内容。

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

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

但是无法访问cache_expiration ......

1 个答案:

答案 0 :(得分:1)

你有 2 解决这个问题的方法,

  1. 您可以编辑核心文件并将其设为cache_expiration 公开而不是受保护并弄乱核心文件( DIRTY WAY
  2. 或者您可以扩展CI_Output类(更好
  3. MY_Output.php application/core文件的MY_选项中找到$config['subclass_prefix']前缀,在application/config/config.php处创建一个文件名。

    然后把这一小段代码:

    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. 我们可以稍后在我们的子类中添加更多功能。
    3. 这是使用中的基本_output方法

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