定制 besnovatyj/yii2-cms-config 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

besnovatyj/yii2-cms-config

Composer 安装命令:

composer require besnovatyj/yii2-cms-config

包简介

Модуль управления конфигурацией для Yii2 CMS

README 文档

README

Модуль динамического управления конфигурацией приложения Yii2 с чистой архитектурой.

Возможности

  • ✅ Динамическое изменение параметров приложения через UI
  • ✅ Автоматический сбор настроек из всех модулей
  • ✅ Гибкое хранилище (PHP файл или БД)
  • ✅ Кэширование для производительности
  • ✅ Валидация значений перед сохранением
  • ✅ Dependency Injection через контейнер

Архитектура

┌─────────────────────────────────────────────────┐
│              Bootstrap                          │
│  (Применяет конфигурацию при запуске)           │
└─────────────────┬───────────────────────────────┘
                  │
                  ▼
┌─────────────────────────────────────────────────┐
│           ConfigService                         │
│  (Оркестратор всей бизнес-логики)               │
└──────┬──────────┬──────────┬────────────────────┘
       │          │          │
       ▼          ▼          ▼
┌───────────┐ ┌──────────┐ ┌──────────────┐
│ Collector │ │Repository│ │   Applier    │
│(Сбор      │ │(Хранение)│ │(Применение)  │
│ опций)    │ │          │ │              │
└───────────┘ └────┬─────┘ └──────────────┘
                   │
                   ▼
            ┌────────────┐
            │  Storage   │
            │ (PHP/БД)   │
            └────────────┘

Слои

Entity Layer

  • ConfigItem - иммутабельный value object для элемента конфигурации
  • ConfigValue - ActiveRecord для хранения в БД

Storage Layer

  • StorageInterface - интерфейс хранилища
  • PhpFileStorage - хранение в PHP файле (по умолчанию)
  • DatabaseStorage - хранение в базе данных

Repository Layer

  • ConfigRepository - абстракция над хранилищем

Service Layer

  • ConfigCollector - собирает опции из config/options.php всех модулей
  • ConfigApplier - применяет значения к приложению (без рекурсии!)
  • ConfigService - главный сервис-оркестратор

Controller Layer

  • ConfigController - тонкий контроллер с DI

Использование

Добавление настроек в модуль

Создайте файл config/options.php в вашем модуле:

<?php
return [
    'my_module_param' => [
        'path' => 'modules.mymodule.params.my_param',
        'label' => 'My Parameter',
        'description' => 'Description of parameter',
        'category' => 'mymodule',  // Для группировки в UI
        'rules' => [
            ['required'],
            ['string'],
        ],
        'inputOptions' => [
            'type' => 'input',  // input, checkbox, textarea, dropdown
        ],
    ],
];

Доступ к параметрам в коде

// Получить значение параметра модуля
$value = Yii::$app->getModule('mymodule')->params['my_param'];

Параметры для настройки

Параметры могут быть многоуровневыми массивами с любым уровнем вложенности.

// Пример как задаются 
return [
    'my_module_param' => [
        'path' => 'modules.mymodule.params.category.my_param',
        'label' => 'My Parameter',
        'description' => 'Description of parameter',
        'category' => 'mymodule',  // Для группировки в UI
        'rules' => [
            ['required'],
            ['string'],
        ],
        'inputOptions' => [
            'type' => 'input',  // input, checkbox, textarea, dropdown
        ],
    ],
];
// Получить значение параметра модуля
$value = Yii::$app->getModule('mymodule')->params['category']['my_param'];

Программное сохранение значений

/** @var ConfigService $configService */
$configService = Yii::$container->get(ConfigService::class);

$result = $configService->saveValues([
    'my_module_param' => 'new value',
]);

if ($result['success']) {
    echo "Saved!";
}

Переключение на БД хранилище

1. Измените config/container.php:

use Besnovatyj\Config\storage\DatabaseStorage;  // вместо PhpFileStorage

return [
    'singletons' => [
        StorageInterface::class => [
            'class' => DatabaseStorage::class,  // Изменить
            // ...
        ],
    ],
];

2. Измените Bootstrap.php:

В методе registerDependencies() замените PhpFileStorage на DatabaseStorage.

3. Примените миграции:

./yii migrate/up --migrationPath=@besnovatyj/Config/migrations

Типы полей ввода

Input

'inputOptions' => ['type' => 'input']

Checkbox

'inputOptions' => ['type' => 'checkbox']

Textarea

'inputOptions' => ['type' => 'textarea']

Dropdown

'inputOptions' => [
    'type' => 'dropdown',
    'items' => [
        'value1' => 'Label 1',
        'value2' => 'Label 2',
    ],
]

Валидация

Используйте стандартные валидаторы Yii2:

'rules' => [
    ['required'],
    ['string', 'max' => 255],
    ['email'],
    ['integer', 'min' => 0],
    ['boolean'],
    ['in', 'range' => ['value1', 'value2']],
]

Расширение

Добавить новое хранилище (Redis)

use Besnovatyj\Config\storage\StorageInterface;

class RedisStorage implements StorageInterface
{
    public function get(string $id): ?string { /* ... */ }
    public function getAll(): array { /* ... */ }
    public function save(array $values): bool { /* ... */ }
    public function clear(): bool { /* ... */ }
}

Зарегистрируйте в config/container.php или Bootstrap.php.

Добавить историю изменений

Расширьте DatabaseStorage:

class DatabaseStorageWithHistory extends DatabaseStorage
{
    public function save(array $values): bool
    {
        // Сохранить в таблицу истории
        foreach ($values as $id => $value) {
            $history = new ConfigHistory();
            $history->config_id = $id;
            $history->old_value = $this->get($id);
            $history->new_value = $value;
            $history->save();
        }

        return parent::save($values);
    }
}

Файлы

  • Bootstrap.php - регистрирует DI и применяет конфигурацию
  • Module.php - главный класс модуля
  • entities/ - domain модели
  • storage/ - реализации хранилищ
  • repositories/ - работа с хранилищем
  • services/ - бизнес-логика
  • controllers/backend/ - контроллеры админки
  • config/container.php - DI конфигурация
  • config/schema.php - схема БД для DatabaseStorage

Требования

  • PHP 8.0+
  • Yii2 2.0.45+
  • Yii2 DI Container

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-07-07

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固