我想缓存我的页面,这可以通过使用:来完成
$this->output->cache(n)
与文档中一样,我可以在控制器中使用一个名为_output的自定义输出方法。
问题是,当我在控制器中创建这个_output方法时,它不会创建任何缓存文件,只显示输出。我查看了Output核心类,发现如果它没有找到任何具有_Output的方法,它只是echo内容。
他们在文档中有这个,在我的输出中使用:
if ($this->output->cache_expiration > 0)
{
$this->output->_write_cache($output);
}
但无法访问cache_expiration。。。
您有2解决此问题的方法,
- 您可以编辑核心文件并使其成为
cache_expiration
公共而不是受保护并扰乱核心文件(肮脏的方式) - 或者可以扩展
CI_Output
类(更好)
在application/core
中创建一个文件名MY_Output.php
,MY_
前缀位于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
}
优点:
- 我们没有把核心文件搞砸
- 我们可以稍后向我们的子类添加更多功能
这是使用的基本_output
方法
public function _output($output)
{
$this->output->get_cache_expiration();
if($this->output->cache_expiration_ > 0)
{
$this->output->_write_cache($output);
}
echo $output;
}