cakePHP从每个Model和Controller获取一个变量

时间:2013-05-02 13:16:12

标签: cakephp cakephp-2.1

我有一个问题。我有一个带有设置(id,name)的db表。 如果我从数据库中读取它们

$settings = $this->Setting->find('list');

如何在AppController中执行此操作或类似的操作来从每个Controller和Model访问?

希望有人可以帮助我。

由于

1 个答案:

答案 0 :(得分:0)

<强>解释

我会假设您正在寻找类似下面的内容(显然,您希望根据自己的应用调整它,但是 - 这就是想法)。

在app控制器中,

  • 从表中找到设置
  • 重复每个并将每个变为“配置”变量

<强>代码:

/**
 * Read settings from DB and populate them in constants
 */
function fetchSettings(){
    $this->loadModel('Setting');
    $settings = $this->Setting->findAll();

    foreach($settings as $settingsData) {
        $value = $settingsData['Setting']['default_value'];

        //note: can't check for !empty because some values are 0 (zero)
        if(isset($settingsData['Setting']['value']) 
            && $settingsData['Setting']['value'] !== null
            && $settingsData['Setting']['value'] !== '') {
            $value = $settingsData['Setting']['value'];
        }
        Configure::write($settingsData['Setting']['key'], $value);
   }
}

然后,您可以通过Configure::read('myVar');

在应用中的任意位置访问它们

关于配置变量的CakePHP书籍的警告。 (我认为在这种情况下使用它们很好,但是 - 要记住一些事情):

  

CakePHP的Configure类可用于存储和检索   应用程序或运行时特定值。小心,这个班级允许   你要在其中存储任何东西,然后在你的任何其他部分使用它   代码:一个肯定的诱惑,打破了CakePHP设计的MVC模式   对于。 Configure类的主要目标是保持集中变量   可以在许多对象之间共享。记得试着活下去   “约定优于配置”,你不会最终打破MVC   我们已经建立起来的结构。