Yii2 Database settings
The preferred way to install this extension is through composer.
Either run
php composer.phar require --prefer-dist jabernal/yii2-settings "*"
or add
"jabernal/yii2-settings": "*"
to the require section of your composer.json
file.
Subsequently, run
./yii migrate/up --migrationPath=@vendor/jabernal/yii2-settings/migrations
in order to create the settings table in your database.
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.
Add this to your main configuration's modules array
'modules' => [
'settings' => [
'class' => 'jabernal\settings\Module',
'sourceLanguage' => 'en'
],
...
],
Add this to your main configuration's components array
'components' => [
'settings' => [
'class' => 'jabernal\settings\components\Settings'
],
...
]
Typical component usage
$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();
To use a custom settings form, you can use the included SettingsAction
.
- Create a model class with your validation rules.
- Create an associated view with an
ActiveForm
containing all the settings you need. - Add
jabernal\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.
Model:
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:
<?php $form = ActiveForm::begin(['id' => 'site-settings-form']); ?>
<?= $form->field($model, 'siteName') ?>
<?= $form->field($model, 'siteDescription') ?>
<?= Html::submitButton('Save', ['class' => 'btn btn-success']) ?>
<?php ActiveForm::end(); ?>
Controller:
function actions(){
return [
//....
'site-settings' => [
'class' => 'jabernal\settings\SettingsAction',
'modelClass' => 'app\models\Site',
//'scenario' => 'site', // Change if you want to re-use the model for multiple setting form.
//'section' => 'site', // By default use modelClass formname value
'viewName' => 'site-settings' // The form we need to render
],
//....
];
}