允许用户更改 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 中的内容,使这种方法根据您的需要变得灵活。