Yii2 Settings
Yii2 Database settings, (*1)
Installation
The preferred way to install this extension is through composer., (*2)
Either run, (*3)
php composer.phar require --prefer-dist xti/yii2-settings "*"
or add, (*4)
"xti/yii2-settings": "*"
to the require section of your composer.json
file., (*5)
Subsequently, run, (*6)
./yii migrate/up --migrationPath=@vendor/xti/yii2-settings/migrations
in order to create the settings table in your database., (*7)
Usage
There are 2 parts to this extension. A module and a component.
The module provides a simple GUI to edit your settings.
The component provides a way to retrieve and save settings programmatically., (*8)
Add this to your main configuration's modules array, (*9)
'modules' => [
'settings' => [
'class' => 'xti\settings\Module',
'sourceLanguage' => 'en'
],
...
],
Add this to your main configuration's components array, (*10)
'components' => [
'settings' => [
'class' => 'xti\settings\components\Settings'
],
...
]
Typical component usage, (*11)
$settings = Yii::$app->settings;
$value = $settings->get('section.key');
$value = $settings->get('key', 'section');
$settings->set('section.key', 'value');
$settings->set('section.key', 'value', null, null, 'string');
$settings->set('key', 'value', 'section', 'description', 'integer');
// Automatically called on set();
$settings->clearCache();
SettingsAction
To use a custom settings form, you can use the included SettingsAction
., (*12)
- Create a model class with your validation rules.
- Create an associated view with an
ActiveForm
containing all the settings you need.
- Add
xti\settings\SettingsAction
to the controller's actions.
The settings will be stored in section taken from the form name, with the key being the field name., (*13)
Model:, (*14)
class Site extends Model {
public $siteName, $siteDescription;
public function rules()
{
return [
[['siteName', 'siteDescription'], 'string'],
];
}
public function fields()
{
return ['siteName', 'siteDescription'];
}
public function attributes()
{
return ['siteName', 'siteDescription'];
}
}
Views:, (*15)
<?php $form = ActiveForm::begin(['id' => 'site-settings-form']); ?>
<?= $form->field($model, 'siteName') ?>
<?= $form->field($model, 'siteDescription') ?>
Controller:, (*16)
function actions(){
return [
//....
'site-settings' => [
'class' => 'xti\settings\SettingsAction',
'modelClass' => 'app\models\Site',
//'scenario' => 'site', // Change if you want to re-use the model for multiple setting form.
'viewName' => 'site-settings' // The form we need to render
],
//....
];
}