neznaika0 / codeigniter-enhanced-config
Advanced features configuration settings
Package info
github.com/neznaika0/codeigniter-enhanced-config
pkg:composer/neznaika0/codeigniter-enhanced-config
Requires
- php: ^8.2
Requires (Dev)
This package is auto-updated.
Last update: 2026-04-08 19:22:02 UTC
README
Установка
composer require neznaika0/codeigniter-enhanced-config
Проблема
В настоящее время, версия CodeIgniter 4.7.х не поддерживает гибкие настройки конфигурационных классов. Особенную боль вызывает работа с массивами: для настройки через .env требуется заранее установить допустимые значения; через Registrars нельзя удалить ключи или изменить порядок.
Есть несколько способов настройки вашего проекта:
- Выполнить все изменения прямо в рабочем каталоге app/Config/, это рекомендованный способ. Но при обновлении фреймворка вам предстоит повторно проверить и восстановить ваши значения.
- Создать Config/Registrar.php в рабочем каталоге или модуле имеет больше возможностей. Можно применить различные функции для динамической настройки. Но всё ещё имеется ограничение для массивов.
- Файл .env позволяет частично редактировать только уже известные ключи массива.
- Для модулей применить вариант с
Publisher. Обновятся классы путём замены кода с помощью регулярных выражений. Минус такого подхода - никогда не знаешь как повлияет замена, если файл отличается от оригинального из фреймворка. - Для особенных случаев возможно создать собственный обработчик, добавив
ReflectionClass.
Решение
Если я не ошибаюсь, всё что нам нужно, это получить текущее значение конфига при работе с Registrar. Официальный патч не рекомендован для CodeIgniter, так как может нарушить безопасность. В частности разработчики модулей смогут взаимодействовать с данными из конфигурации.
Для меня нет причин бояться этого. Поэтому создал пакет для всех желающих попробовать.
Использование
В общем и целом, логика почти не поменялась:
- Добавьте в желаемые конфигурационные классы трейт:
<?php namespace Config; use CodeIgniter\Config\BaseConfig; use Neznaika0\CodeIgniterEnhancedConfig\EnhancedRegistrarTrait; class App extends BaseConfig { use EnhancedRegistrarTrait;
- Создайте файл app/Config/Registrar.php или в директории модуля module_dir/Config/Registrar.php.
- Добавьте новые значения используя текущие параметры из
$currentProperties:
class Registrar { /** * @param array<string, mixed> $currentProperties * * @return array<string, mixed> */ public static function App(array $currentProperties): array { // $currentProperties contains values from App return [ 'baseURL' => 'http://domain.com:8080/', // Use the previous values 'supportedLocales' => array_merge($currentProperties['supportedLocales'], ['ru']), // or replace it completely 'supportedLocales' => ['ru', 'en', 'de'], ]; }
Помните про важные особенности:
- Значение после
Registrarбудет перезаписано из .env. - Не изменяйте типизацию свойств.
- Не все классы расширяют
BaseConfig. - Порядок вызова нескольких
Registrarможет быть разным.
Помощь
Если вы нашли ошибки или есть предложения по улучшению, можете отправить PR или открыть Проблему.