The Settings Plugin allows you to manage your settings (normally used with cake's Configure
-class) in your database.
-
Is easy to use: you can use the
Configure::read()
andConfigure::write()
methods via theSetting
-class. -
Also, you are able to read and write settings by your console.
-
Last but not least: If you use the CakeAdmin Plugin you get an automatically generated form :).
Note: The Settings-plugin is prefix-minded. An example:
Prefix.Name
.
You can install this plugin into your CakePHP application using composer. For existing applications you can add the following to your composer.json
file:
"require": {
"jeffersonsimaogoncalves/cakephp-settings": "dev-master"
}
And run /composer update
.
You will need to add the following line to your application's bootstrap.php file:
Plugin::load('Settings', ['bootstrap' => true, 'routes' => true]);
// or run in your shell
$ bin/cake plugin load -b -r Settings
Next you need to create the table. Use the following command to initialize the settings-table.
$ bin/cake migrations migrate -p Settings
The Setting
-class works the same like the Configure
-class from CakePHP itself.
You can include the class with:
use Settings\Core\Setting;
You can write settings with the following:
Setting::write('App.Name', 'Custom Name');
The value Custom Name
is now written to the database with the key App.Name
. The empty array can contain multiple options
Now we gonna read the value from our just created key. Use:
Setting::read('App.Name');
This will return our value: Custom Name
.
To prevent missing configurations when migrating to another environment the register
method is introduced.
Use the following to make sure the configuration exists in your application:
Setting::register('App.Name', 'Default Value', []);
The following options are available:
description
- Description of your setting.type
- Type to use liketext
,select
, and more.options
- Array with available options. In combination with thetype = select
option, this will generate a select-box with the given options.editable
- Bool if the setting should be editable.weight
- Weight (order) of the setting.
The options key can handle multiple types. You can define an array with options, but you can also create a close to prevent long queries on every request. Example:
Setting::register('App.Index', false, [
'options' => function() {
return TableRegistry::get('Blogs')->find('list')->toArray();
}
]);
If you are using the CakeAdmin Plugin, we will create a default form where you can edit your settings (if the field editable
isset to 1
). The Settings-Plugin will automatically add a menu-item to the admin-area.
If you click the menu-item you will see a list with all editable settings who contains the chosen prefix (or default: App
).
To add your prefix to the settings-list use the following:
Configure::write('Settings.Prefixes.Test', 'Test');
This work is based on the code by CakeManager.