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



当前我正在使用类似的东西:

//at bootstrap.php file
Configure::write('from', 'mymail@mydomain.com')
//at controllers or models files
$var = Configure::read('from')

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

我正在考虑使用AppModel进行操作,但是只能用于模型而不是控制器。

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

谢谢。

您可以创建一个单独的模型/插件,该模型/插件将映射到数据库中的配置表。然后通过控制器的$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中加载设置以遵循干燥规则。

  1. 在您的AppModel中创建GetSetting
  2. 在AppController中您可以编写此方法:

    public function getSettings() {
        return $this->{$this->modelClass}->getSettings();
    }
    

这样,任何模型和任何控制器都可以使用getSettings()方法

任何型号调用:

$mysettings = $this->getSettings();

任何控制器调用:

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

最新更新