在CakePHP 2.2中为模型和控制器定义全局变量

时间:2012-10-30 13:57:14

标签: cakephp cakephp-2.0 cakephp-2.1 cakephp-2.2

目前我使用的是这样的东西:

//at bootstrap.php file
Configure::write('from', 'mymail@mydomain.com')

//at controllers or models files
$var = Configure::read('from')

问题是,我想通过数据库管理该变量,以便能够以更简单的方式对其进行修改。

我正在考虑使用AppModel进行此操作,但只有模型而非控制器才能访问它。

在这种情况下我该怎么做?

感谢。

2 个答案:

答案 0 :(得分:4)

您可以创建一个单独的模型/插件,该插件将映射到数据库中的配置表。然后通过控制器的$uses语句和模型的App::import()加载它。

class SystemSetting extends AppModel {

/**
 * Return a list of all settings
 *
 * @access public
 * @return array
 */
    public function getSettings() {        
        return $this->find('all');
    }
}

然后,在你的控制器中:

class SomeController extends AppController {

    var $uses = array('SystemSetting');

    public function displaySettings() {
        $settings = $this->SystemSetting->getSettings();
        // .. your code
    }
}

模特:

App::import('Model', 'SystemSettings.SystemSetting');
$settings = new SystemSetting();
$mySettings = $settings->getSettings();

这很好用。当然,您也可以在AppControllerAppModel中加载设置,以遵循DRY规则。

答案 1 :(得分:1)

  1. 在AppModel中创建getSettings
  2. 在AppController中
  3. 你可以编写这个方法:

    public function getSettings() {
        return $this->{$this->modelClass}->getSettings();
    }
    
  4. 这样,getSettings()方法可用于任何模型和任何控制器

    任何模型通话:

    $mysettings = $this->getSettings();
    

    任何控制器电话:

    $mysettings = $this->MODELNAME->getSettings();