Target Settings For Yii2
The preferred way to install this extension is through composer.
Either run
php composer.phar require --prefer-dist yiier/yii2-target-setting "*"
or add
"yiier/yii2-target-setting": "*"
to the require section of your composer.json
file.
Before usage this extension, we'll also need to prepare the database.
php yii migrate --migrationPath=@yiier/targetSetting/migrations/
To access the module, you need to configure the modules array in your application configuration:
'modules' => [
'targetSetting' => [
'class' => 'yiier\targetSetting\Module',
],
],
Component Setup
To use the Setting Component, you need to configure the components array in your application configuration:
'components' => [
'targetSetting' => [
'class' => 'yiier\targetSetting\TargetSetting',
],
],
<?php
$setting = Yii::$app->targetSetting;
$value = $setting->get('key');
$value = $setting->get('key', User::tableName(), Yii::$app->user->id);
$setting->set('key', 125.5);
$setting->set('key', 125.5, User::tableName(), Yii::$app->user->id);
$setting->set('key', false, User::tableName(), Yii::$app->user->id, 'Not allowed Update Post');
$setting->set('key', false, '', 0, 'Not allowed Update Post');
// Checking existence of setting
$setting->has('key');
$setting->has('key', User::tableName(), Yii::$app->user->id);
// Activates a setting
$setting->activate('key');
$setting->activate('key', User::tableName(), Yii::$app->user->id);
// Deactivates a setting
$setting->deactivate('key');
$setting->deactivate('key', User::tableName(), Yii::$app->user->id);
// Removes a setting
$setting->remove('key');
$setting->remove('key', User::tableName(), Yii::$app->user->id);
// Removes all settings
$setting->removeAll();
$setting->removeAll(User::tableName(), Yii::$app->user->id);
// Get's all values in the specific section.
$setting->getAllByTarget(User::tableName(),Yii::$app->user->id);
$setting->invalidateCache(); // automatically called on set(), remove();
$setting->invalidateCache(User::tableName()); // automatically called on set(), remove();
To use a custom settings form, you can use the included TargetSettingAction
.
- Create a model class with your validation rules.
- Create an associated view with an
ActiveForm
containing all the settings you need. - Add
yiier\targetSetting\targetSettingAction
to the controller's actions.
The settings will be stored in section taken from the form name, with the key being the field name.
<?php
class SiteForm extends Model
{
public $siteName, $siteDescription;
public function rules()
{
return [
[['siteName', 'siteDescription'], 'string'],
];
}
public function fields()
{
return ['siteName', 'siteDescription'];
}
public function attributes()
{
return ['siteName', 'siteDescription'];
}
public function attributeLabels()
{
return [
'siteName' => 'Site Name',
'siteDescription' => 'Site Description'
];
}
}
<?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(); ?>
public function actions()
{
return [
//....
'site-settings' => [
'class' => TargetSettingAction::class,
'modelClass' => 'app\models\SiteForm',
//'scenario' => 'site', // Change if you want to re-use the model for multiple setting form.
//'targetType' => 'company', // By default use ''
//'targetId' => 1, // By default use \Yii::$app->user->id
'viewName' => 'site-settings', // The form we need to render
'successMessage' => '保存成功'
],
//....
];
}