定义模型和控制器全局变量在CakePHP的2.2(Define global variable fo

2019-10-17 08:52发布

目前我使用这样的事情:

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

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

问题是,我想通过数据库来管理该变量可以修改它在一个简单的方法。

我在想与做AppModel但那就只能是模型,而不是控制器访问。

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

谢谢。

Answer 1:

您可以创建一个单独的模型/插件,它会在你的数据库被映射到一个配置表。 通过随后加载$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原则。



Answer 2:

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

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

这种方式的getSettings()方法在任何模型和任何可用的控制器

任何型号的呼叫:

$mysettings = $this->getSettings();

任何控制器的呼叫:

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


文章来源: Define global variable for Models and Controllers at CakePHP 2.2