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 rsol/yii2-settings "*"
or add, (*4)
"rsol/yii2-settings": "*"
to the require section of your composer.json
file., (*5)
Subsequently, run, (*6)
./yii migrate/up --migrationPath=@vendor/rsol/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' => 'rsol\settings\Module',
'sourceLanguage' => 'en'
],
...
],
Add this to your main configuration's components array, (*10)
'components' => [
'settings' => [
'class' => 'rsol\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, 'string');
$settings->set('key', 'value', 'section', '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
contain all the settings you need.
- Add
rsol\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' => 'rsol\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
],
//....
];
}
SettingsAction v2
To use a custom settings form, you can use the included actions\SettingsAction
., (*17)
- Create an associated view with an
ActiveForm
contain all the settings you need.
- Add
rsol\settings\actions\SettingsAction
to the controller's actions.
Views:
See /rsol/settings/views/default/custom.php, (*18)
Controller:, (*19)
public function actions()
{
return [
'customer' => [
'class' => SettingsAction::className(),
'viewName' => 'custom' // The form we need to render
'config' => [
'attributes' => [
[
'section' => 'currency',
'key' => 'rur',
'label' => 'RUB currency',
],
[
'section' => 'currency',
'key' => 'usd',
'label' => 'USD currency',
],
[
'section' => 'system',
'key' => 'email',
'label' => 'System E-mail',
],
],
'rules' => [ // Additional rules for validation
[['currency.rur', 'currency.usd', 'system.email'], 'required'],
],
],
],
];
}