我的侧边栏在我的所有视图中都有相同的元素,因此我不是在所有控制器中反复调用它们,而是创建了一个MY_Controller类并从那里创建变量。问题是,我的变量中的内容来自一个文件,所以现在每次加载我的网站时我都会打电话来读取文件。有人向我指出这不太好。
所以我要做的是读取模型中的文件,然后将其存储在变量中,然后将该变量传递给MY_Controller。问题是我现在只面临同样的问题而不是从MY_Controller读取文件我正在从模型中读取它。所以我尝试在一个不同的函数中创建一个可以在我的整个模型中使用的变量,然后是一个返回该变量的函数,但它不起作用。这是我的代码:
型号:
class My_model extends CI_Model {
public $report = null;
function read_file()
{
$this->report = file_get_contents('/path/to/file');
}
function get_file()
{
return $this->report;
}
}
MY_Controller:
class MY_Controller extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('My_model');
$report = $this->My_model->get_file();
...
}
}
现在$report
正在返回null。
read_file()
函数应该每天调用一次,因为该文件每天早上更新。任何提示指出是否可以做我正在尝试的事情,或者如果有更好的方法将非常感激。
答案 0 :(得分:2)
我不会给你代码,因为它需要太长时间,但我会解释Symfony2是如何做到的。听说过树枝?好吧,不管你是否熟悉它,它的重要部分是它如何编译模板。
它将所有模板逻辑和文本编译为填充了生成的函数和字符串的PHP文件。第一次执行模板时,将执行此编译。第二次,重新编译PHP。
IO仍然有效,但仅限于包含的PHP页面。您可以通过将整个源引导到单个文件中来消除此问题(Symfony使用库而不是模板执行此操作)。
所以,为了"缓存"你的内容是PHP,你需要编写一个PHP转储器(或使用现有的),或者在简单的数据结构上使用var_export
来转储预先加载的数据。
答案 1 :(得分:0)
你应该在get_file之前调用read_file函数,调用函数read_file和更新文件之间也没有关系。