Я заметил, что на моем одном проекте становится слишком много различий в конфигурациях. Например:
Отсюда и вопрос, вы как прожженый в этом вопросе, подскажите библиотеку или "самурай уэй". Можно конечно все решить через обычный:
if (APP_ENV === 'prod') {
$config['components']['session'] = ProdSession::class;
}
но оно выглядит как то не очень.
Если конфиг большой, то мы вообще можем и не знать что где-то есть такая "перезапись". Есть какое подобие dotenv или что нибудь вроде того?
Чем больше таких различий, тем больше потенциальных проблем, что локально или на тестовой машине что-то может работать, а на продакшене нет. Или наоборот. Например, при обновлении фреймворка может обнаружиться баг в DbSession
и продакшен упадёт. Поэтому я не делаю различий и везде настраиваю всё одинаково.
Различия обычно бывают у программистов при разработке без виртуализации, когда локально нет желания или возможности установить отдельное хранилище для сессии или почтовый сервер.
Но при разработке с Vagrant или Docker таких проблем нет. С ними можно доустановить нужные сервисы и во всех окружениях использовать одинаковые сессии, мэйлер и кеш. Как мы в свой проект доустановили эмулятор почтовика и настоящее S3-хранилище для локального и тестового окружений.
Тогда переопределений почти не понадобится. Например, на локалке можно оставить переключение кэша на ArrayCache
только при запуске тестов по APP_ENV === 'test'
.
А так можно специфику для окружений выносить в отдельные файлы вроде:
$config = Config::merge(
require 'config/common.php',
require 'config/' . getenv('APP_ENV') . '.php'
);
чтобы не вписывать кучи if
в единый config.php
.
Или войти через: