Перед завантаженням змінних Laravel дивиться, чи задано APP_ENV (змінною оточення процесу) або опцію --env у команді Artisan. Якщо так, і поруч є .env.{APP_ENV}, береться він замість .env.
APP_ENV=staging php artisan migrate # прочитає .env.staging, якщо він є
php artisan test # phpunit.xml ставить APP_ENV=testing -> .env.testing
Типова схема:
.env- локальна розробка, у.gitignore;.env.example- шаблон з усіма змінними без секретів, у репозиторії;.env.testing- окрема база й драйвери для тестів (QUEUE_CONNECTION=sync,MAIL_MAILER=array);- продакшен - змінні оточення платформи чи секрет-менеджера, а не файл у репозиторії.
Пріоритет: справжні змінні оточення процесу важливіші за значення з .env - так платформа перекриває налаштування без зміни файлів.
Пастка: config:cache, виконаний з одним оточенням, «заморожує» його значення. Закешована конфігурація з продакшену на машині розробника чи навпаки - класична причина «тести пишуть у робочу базу». Тому кеш конфігурації будують лише там, де він буде використаний.
Перевірити, яке оточення активне: app()->environment(), php artisan about.