允许用户更改 CakePHP 中的配置设置
Allowing the user to change config settings in CakePHP
使用 CakePHP 2.6.7
我创建了一个插件,其中有 2 个变量,其中大部分是有效常量 - 但用户应该能够更改它们的值(它们是页眉和页脚图像的路径)。
我一直在尝试使用 Configure::read()
和 Configure::write()
,但现在意识到这不是 Configure
的目的,而且实际上根本无法以这种方式工作。
应该如何存储这两个变量,以便用户可以更改值并且这些更改将是永久性的(直到他们进行另一次更改)?
初始解
我现在通过将数组中的数据序列化为文本文件解决了这个问题。如果有人有更优雅的解决方案,那就太好了。
最简单的解决方案是将这些值作为设置存储在数据库中,然后加载它们。
我们经常使用 Setting
模型来存储名称-值对,然后附加一个加载数据的组件(通常附加到 AppController
)。例如,创建一个这样的组件:-
App::uses('Component', 'Controller');
class SettingsComponent extends Component {
public function initialize(Controller $Controller) {
$Controller->loadModel('Setting');
$settings = $Controller->Setting->find('all');
foreach($settings as $setting) {
Configure::write('Setting.' . $setting['Setting']['name'], $setting['Setting']['value']);
}
return;
}
}
然后为需要这些设置的任何控制器加载它:-
public $components = array('Settings');
然后您可以访问代码中的值,例如:-
Configure::read('Setting.app_name', 'My Cake App');
您可以轻松地扩展组件的功能以及存储在 settings
table 中的内容,使这种方法根据您的需要变得灵活。
使用 CakePHP 2.6.7
我创建了一个插件,其中有 2 个变量,其中大部分是有效常量 - 但用户应该能够更改它们的值(它们是页眉和页脚图像的路径)。
我一直在尝试使用 Configure::read()
和 Configure::write()
,但现在意识到这不是 Configure
的目的,而且实际上根本无法以这种方式工作。
应该如何存储这两个变量,以便用户可以更改值并且这些更改将是永久性的(直到他们进行另一次更改)?
初始解
我现在通过将数组中的数据序列化为文本文件解决了这个问题。如果有人有更优雅的解决方案,那就太好了。
最简单的解决方案是将这些值作为设置存储在数据库中,然后加载它们。
我们经常使用 Setting
模型来存储名称-值对,然后附加一个加载数据的组件(通常附加到 AppController
)。例如,创建一个这样的组件:-
App::uses('Component', 'Controller');
class SettingsComponent extends Component {
public function initialize(Controller $Controller) {
$Controller->loadModel('Setting');
$settings = $Controller->Setting->find('all');
foreach($settings as $setting) {
Configure::write('Setting.' . $setting['Setting']['name'], $setting['Setting']['value']);
}
return;
}
}
然后为需要这些设置的任何控制器加载它:-
public $components = array('Settings');
然后您可以访问代码中的值,例如:-
Configure::read('Setting.app_name', 'My Cake App');
您可以轻松地扩展组件的功能以及存储在 settings
table 中的内容,使这种方法根据您的需要变得灵活。