如何在CakePhp 2.3中仅执行一次与模型相关的代码

时间:2017-04-27 13:30:18

标签: php cakephp cakephp-2.3

我想要的是什么:
我有一个模型Version,其成员函数为update。我希望每次加载页面时都调用一次这个成员函数。

到目前为止我做了什么:
我目前的做法是添加行

ClassRegistry::init('Version')->update();

进入beforeFilter()

AppController方法

之前的解决方案是将以下代码放入app/Config/bootstrap.php

App::uses('CakeEventManager', 'Event');
CakeEventManager::instance()->attach(
    function(){
        AppModel::getSingletonModel('Version')->update();
    },
    'Controller.startup'
);

getSingletonModel执行听起来的样子 - 获取模型的单例实例)

问题:
两个解决方案都可以工作,如果加载了多个控制器,则会多次调用该函数。这会占用资源 此外,执行ClassRegistry时,尚未加载bootstrap.php。所以我不能直接调用那里的函数。

其他信息:
调用几个控制器的(技术)原因似乎是,在仪表板视图中,通过调用$this->requestAction生成一些内容。

我的问题:
CakePHP中是否有一种方法只调用一次函数,比如文件app/Config/bootstrap.php,但模型加载后

一些背景知识 我和其他开发人员一起在CakePHP 2.3中开发了一个项目 我正在开发一个自动更新系统,开发人员可以在其中添加一些他们想要运行的代码(例如,为了使数据库适应增加的功能)。

1 个答案:

答案 0 :(得分:0)

看起来我刚问了错误的问题。

我通过在getQuality()

中加载ClassRegistry来实现效果
bootstrap.php