rafalkot / yii2-settings
为 Yii Framework 2.0 提供简单的设置管理
1.0.0
2016-03-02 11:02 UTC
Requires
This package is not auto-updated.
Last update: 2024-09-20 17:38:51 UTC
README
Yii2 框架的设置管理组件。
特性
- 设置存储在数据库中
- 简单的 API 用于读写/删除
- 分类设置
- 通过 SettingsTrait 简单集成到您的组件、模型、模块等
- SettingsForm 小部件
安装
1. 通过 composer 安装
$ composer require rafalkot/yii2-settings
2. 将组件添加到您的应用程序配置中
将 yii2-settings 组件添加到您的配置文件中
'components' => [ ... 'settings' => [ 'class' => 'rafalkot\yii2settings\Settings', // optional configuration: 'db' => 'db', // DB Component ID 'preLoad' => ['category1', 'category2'] // Categories to be loaded on component initialization ], ... ]
3. 创建数据库表
CREATE TABLE IF NOT EXISTS `setting` ( `category` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'system', `key` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL, `value` text COLLATE utf8mb4_unicode_ci NOT NULL, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `created_by` int(11) DEFAULT NULL, `updated_by` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ALTER TABLE `setting` ADD PRIMARY KEY (`category`,`key`), ADD KEY `fk_setting_user1_idx` (`created_by`), ADD KEY `fk_setting_user2_idx` (`updated_by`);
使用方法
组件
读取设置
// will return `key` setting value from `categoryName` category or `defaultValue` (defaults sets to be null) Yii::$app->settings->get('categoryName', 'key', 'defaultValue'); // will return an array of `key1` & `key2` settings from `categoryName` category Yii::$app->settings->get('categoryName', ['key1', 'key2']); // you can set default values too Yii::$app->settings->get('categoryName', ['key1', 'key2'], ['key1' => 'key1default', 'key2' => 'key2default']); // will return array of all settings from `categoryName` category Yii::$app->settings->get('categoryName');
保存设置
// saves single setting Yii::$app->settings->set('categoryName', 'key', 'value'); // saves multiple settings Yii::$app->settings->set('categoryName', [ 'key1' => 'value 1', 'key2' => 'value 2' ]);
删除设置
// removes single setting Yii::$app->settings->remove('categoryName', 'key'); // removes multiple settings Yii::$app->settings->remove('categoryName', ['key1', 'key2']); // removes all settings from category Yii::$app->settings->remove('categoryName');
加载设置
// loads settings from single category Yii::$app->settings->load('categoryName'); // loads settings from multiple categories Yii::$app->settings->load(['categoryName1', 'categoryName2']);
SettingsTrait
SettingsTrait
提供了一些简单的设置访问方法。
示例用法(所有操作都是使用 site
类别)
namespace app\components; use rafalkot\yii2settings\SettingsTrait; class Site { use SettingsTrait; public function getSettingsCategory() { return 'site'; } public function someMethod() { $this->setSetting('key', 'value'); $this->getSetting('key', 'defaultValue'); $this->getSetting(); $this->removeSetting('key'); $this->removeSetting(); } }
SettingsForm 小部件
SettingsForm
小部件根据我们的表单定义渲染表单。
这可以通过重写 getSettingsFormConfig
方法从 SettingsTrait
来实现。
首先,让我们将表单定义添加到我们的类中
namespace app\components; use rafalkot\yii2settings\SettingsTrait; use yii\jui\DatePicker; class Site { use SettingsTrait; public function getSettingsCategory() { return 'site'; } public function getSettingsFormConfig() { return [ // text input 'title' => [ 'input' => 'text', 'label' => 'Site Title' ], // dropdown list 'comments' => [ 'input' => 'dropdown', 'label' => 'Are comments enabled?', 'options' => [1 => 'Yes', 0 => 'No'], 'default' => 1 ], // checkboxes 'languages' => [ 'input' => 'checkboxList', 'options' => ['en' => 'English', 'pl' => 'Polish'] ], // custom input 'custom_input' => [ 'input' => function ($model, $key) { return DatePicker::widget(['model' => $model, 'attribute' => $key]); }, 'label' => 'Some label' ] ]; } }
示例操作
namespace app\controllers; use yii\web\Controller; use app\components\Site; class Yii2SettingsController extends Controller { public function actionExample() { $site = new Site(); return $this->render('example', [ 'site' => $site ]); } }
在视图中使用小部件
use rafalkot\yii2settings\SettingsForm; echo SettingsForm::widget([ 'object' => $site ]);
许可证
Yii2-settings 在 MIT 许可证下发布,有关详细信息请参阅 LICENSE 文件。