Этот ответ состоит из нескольких частей.
- Конфигурация кеширования
Проблема в этом вопросе присутствует только в том случае, если вы кэшировали свою конфигурацию в своей локальной среде . Если вы когда-либо запускали php artisan config:cache
или php artisan optimize
, вы кешировали свою конфигурацию.
В результате laravel больше не будет читать ваш файл .env и загружать все значения для config и .env из cache.
Лучше всего не использовать env () во всем приложении, а создать файлы конфигурации для этих значений. Это ускорит ваше приложение в производстве . Если вы хотите воспользоваться преимуществами кеширования конфигурации, вы НЕ МОЖЕТЕ использовать env () где угодно, кроме ваших файлов конфигурации.
В вашей локальной среде документация рекомендует не кэшировать конфигурацию, так как она будет часто обновляется. Я думаю, что это хороший совет с одной оговоркой: env (). Если вы не кэшируете свою конфигурацию на локальном компьютере, но находитесь в рабочей среде, вы не столкнетесь с ошибками, подобными той, которая послужила толчком для этого сообщения на локальном уровне. Если у вас есть конвейер ci и хорошие методы тестирования, это препятствие будет преодолено.
Если вы придерживаетесь локальной конфигурации кеша, каждый раз, когда вы обновляете свои файлы конфигурации или файл .env, вам нужно будет запускать php artisan config:cache
.
Отключение кеша конфигурации
Запуск php artisan config:clear
или удаление /bootstrap/cache/config.php
laravel больше не будет пытаться читать конфигурацию из кеша, а .env будет работать вне файлов конфигурации. Если вы сделаете это, как я сказал в (1), убедитесь, что есть часть вашего конвейера, которая будет перехватывать эти ошибки, если вы кэшируете конфигурацию в производственной среде.
После дальнейшего обсуждения с OP я сделаю Ясно еще одно:
Конфигурация кэша не просто автоматически кэширует ваши ключи .env, чтобы вы могли получить к ним доступ, как config ('SOME_CUSTOM_DOT_ENV_KEY'). При использовании конфигурации кеша, если вам нужно получить доступ к переменным среды внутри вашего приложения, вы должны ссылаться на них в файле конфигурации.
Опять же, после включения кеша конфигурации .env становится бесполезным, но он используется для создайте кеш.
Итак, если вы в .env скажете:
GOOGLE_API_TOKEN=xxxx
, вы могли бы создать файл конфигурации, например:
google. php
return [
'api_token' => env('GOOGLE_API_TOKEN', 'some-default-value'),
];
И в своем приложении вы будете ссылаться только на config ('google.api_token') и никогда на env ('GOOGLE_API_TOKEN').