问题
Currently i am using something like this:
//at bootstrap.php file
Configure::write('from', 'mymail@mydomain.com')
//at controllers or models files
$var = Configure::read('from')
The thing is, i would like to manage that variable through the database to be able to modify it in a simpler way.
I was thinking about doing it with AppModel
but then it would only be accessible for Models and not controllers.
What should I do in this case?
Thanks.
回答1:
You can create a separate model / plugin which will be mapped to a configuration table in your database. Then load it through $uses
statement for controllers and App::import()
for models.
class SystemSetting extends AppModel {
/**
* Return a list of all settings
*
* @access public
* @return array
*/
public function getSettings() {
return $this->find('all');
}
}
Then, in your controller:
class SomeController extends AppController {
var $uses = array('SystemSetting');
public function displaySettings() {
$settings = $this->SystemSetting->getSettings();
// .. your code
}
}
In model:
App::import('Model', 'SystemSettings.SystemSetting');
$settings = new SystemSetting();
$mySettings = $settings->getSettings();
This works just fine. Of course, you might also load settings in both AppController
and AppModel
to follow the DRY rule.
回答2:
- create the getSettings in your AppModel
in AppController you can write this method:
public function getSettings() { return $this->{$this->modelClass}->getSettings(); }
this way the getSettings() method is available in any model and any controller
any model call:
$mysettings = $this->getSettings();
any controller call:
$mysettings = $this->MODELNAME->getSettings();
来源:https://stackoverflow.com/questions/13140588/define-global-variable-for-models-and-controllers-at-cakephp-2-2