ancor/yii2-related-kv-storage

SQL数据库中的相关键值存储。

dev-master 2019-09-23 12:34 UTC

This package is not auto-updated.

Last update: 2024-09-15 22:22:09 UTC


README

描述

基于MySQL表的存储。可用于从管理面板编辑设置。

此扩展有两个类

请通过以下方式告诉我您希望添加的其他内容:

安装

安装此扩展的首选方式是通过composer

运行以下命令:

$ php composer.phar require ancor/yii2-related-kv-storage

或者将以下内容添加到您的composer.json文件的require部分:

"ancor/yii2-related-kv-storage": "dev-master"

配置类

简单的类似于数组的键值存储。

功能

  • 此类是RelatedConfig的基础
  • 对选项的数组访问(也是可数的和可迭代的)
  • 此类可以用作$ app容器中的yii组件
  • 此类旨在继承和扩展
  • 当实例创建时从数据库自动加载**自动加载配置**

基于MySQL表的存储。可用于从管理面板编辑设置。

配置

'components' => [
    'config' => [
        'class' => 'ancor\relatedKvStorage\Config',

        // default settings
        // 'tableName'  => '{{config}}',
        // 'keyField'   => 'key',
        // 'valueField' => 'value',
    ]
]

用法

简单用法

Yii::$app->config['main-page.show-banner'] = true;

if (Yii::$app->config['main-page.show-banner']) { ... }

可迭代的

$config = Yii::$app->config;

foreach ($config as $key => $value) {
    echo $key . ' -> ' . $value . "\n";
}

当实例创建时自动加载配置。但配置将**不会自动保存**。

Yii::$app->config->attributes = [
    'default.option-one' => true,
    'default.option-two' => false,
];

// Can be get, but didn't store
echo Yii::$app->config['default.option-one']; // true

// For convenience, let's make some variable
$config = Yii::$app->config;

// Save to database
$config->save();

// let's change any value
$config['default.option-one'] = false;
echo $config['default.option-one']; // false

// And now, imagine that we need to reset changed values to default.
// Reload from database. Please note, ->save() was not fired.
$config->reload();
echo $config['default.option-one']; // true

// If we need to array type
echo gettype($config->attributes); // array

RelatedConfig类

类似于Config的简单键值存储,但与另一个实体相关

功能

  • 此类继承自[[\ancor\relatedKvStorage\Config]]的所有功能
  • 非常适合存储用户偏好,并且这些偏好需要具有默认值

值通过三个步骤提取

  1. 尝试从当前(RelatedConfig)模型中获取当前值。
  2. 尝试从通用配置组件(Yii::$app->config)中获取默认值。
  3. 如果没有收到值,将返回null。

请使用Yii::createObject()创建实例以配置实例。

配置

**最好通过模型使用**。例如对于User类

use ancor\relatedKvStorage\RelatedConfig

class User extends ... {

   ...

  /**
   * Get user configuration
   * @return RelatedConfig
   */
  public function getConfig() {
      $config = Yii::createObject([
          'class'      => RelatedConfig::className(),
          'relationId' => $this->id,

          // Default settings
          // 'tableName'           => '{{user_config}}',
          // 'relationIdField'     => 'user_id',
          // 'configComponentName' => 'config',
          // 'useCommonConfig'     => true,
      ]);
  }
}

用法

// set default global settings (use Config class)
Yii::$app->config->attributes = [
   'user.dialogs.message-limit' => 100,
   'user.friends.limit => 20,
];

$user = new User();

$user->config = [

     // this option has not default value in global settings
    'user.dialogs.allow-modify' => true,

     // override default value from global settings
    'user.friends.limit' => 50,
];

// Must have! ( getConfig() reload don't cache `config` object and reload every time. So we didn't do it )
$user->config->save();

// use current value
echo $user->config['user.dialogs.allow-modify']; // true
// override default, use current value
echo $user->config['user.friends.limit']; // 50
// have not current, use default value
echo $user->config['user.dialogs.message-limit']; // 100