Верх страницы
Обложка к записи Не используйте env() вне файлов конфигурации
Время для прочтения: 0 мин. 20 сек.

Не используйте env() вне файлов конфигурации

На форумах по Laravel я часто вижу несколько однотипных вопросов, связанных с использованием функции env().

Звучат они примерно так:

.env иногда не читает переменные
env()/getenv() иногда не инициализированы
я изменил имя базы данных в .env-файле, но ничего не произошло

Возможно, это случалось и с вами. Надеюсь, к концу этого поста вы будете знать, почему так происходит и как этого избежать.

Кэширование конфигурации

На странице документации по развертыванию Laravel упоминается оптимизация загрузки конфигурации, и если вы будете следовать этой документации, то, скорее всего, выполните следующую команду при развертывании сайта на продакшене:

php artisan config:cache

Вы можете спросить, какое отношение это имеет к функции env()?

Когда вы кэшируете конфигурацию, Laravel объединяет все ваши конфигурационные файлы в один для повышения производительности, но еще один эффект, который дает эта команда, заключается в том, что Laravel перестает читать ваш файл .env. Это означает, что функция env() не будет возвращать значения, которые вы указали в файле .env.

Отказываемся от .env файла

Означает ли это, что вам следует вообще отказаться от использования файла .env?

Нет, это означает только то, что вам следует прекратить использовать функцию env() в вашем коде и вместо этого использовать ее только в файлах конфигурации.

Вместо того чтобы делать что-то вроде:

Stripe::setApiKey(env('STRIPE_API_KEY'));

Вам следует поступать так:

Stripe::setApiKey(config('services.stripe.api_key'));

А затем просто добавить вызов env() в свой конфигурационный файл:

// config/services.php
return [
...
    'stripe' => [
        'api_key' => env('STRIPE_API_KEY'),
    ]
];

Теперь все должно работать так, как и ожидалось.

Файл .env в продакшене

Что делать, если вы захотите изменить файл .env в проде?

В этом случае вы можете запустить команду cache снова после изменения файла:

php artisan config:cache

Если по какой-то причине вам нужно удалить кэш, вы можете сделать это с помощью следующей команды:

php artisan config:clear

Источник: You should never use env() outside of your config files.

Автор: Кобзарёв Михаил

Русский разработчик с 20-ти летним стажем. Работаю с PHP, ООП, JavaScript, Git, WordPress, Битрикс, Joomla, Drupal, OpenCart, DLE, Laravel, Moonshine, Symfony, SuiteCRM.

Оптимизирую сайты под Google Page Speed, настраиваю импорты для больших магазинов на WooCommerce + WP All Import. Пишу плагины на заказ. Все мои услуги.

Веду блог о разработке, дайджест в телеграмме и в ВК.

Вы всегда можете нанять меня.

Комментарии
Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Предыдущая запись
Следующая запись

Давайте дружить
в Telegram

Авторский блог вашего покорного слуги в Telegram про web, программирование, алгоритмы, инструменты разработчика, WordPress, Joomla, Opencart, Laravel, Moonshine, фильмы и сериалы