neznaika0/codeigniter-enhanced-config

Advanced features configuration settings

Maintainers

Package info

github.com/neznaika0/codeigniter-enhanced-config

pkg:composer/neznaika0/codeigniter-enhanced-config

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.0 2026-04-08 19:15 UTC

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, так как может нарушить безопасность. В частности разработчики модулей смогут взаимодействовать с данными из конфигурации.

Для меня нет причин бояться этого. Поэтому создал пакет для всех желающих попробовать.

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

В общем и целом, логика почти не поменялась:

  1. Добавьте в желаемые конфигурационные классы трейт:
<?php

namespace Config;

use CodeIgniter\Config\BaseConfig;
use Neznaika0\CodeIgniterEnhancedConfig\EnhancedRegistrarTrait;

class App extends BaseConfig
{
    use EnhancedRegistrarTrait;
  1. Создайте файл app/Config/Registrar.php или в директории модуля module_dir/Config/Registrar.php.
  2. Добавьте новые значения используя текущие параметры из $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 или открыть Проблему.