Безопасный способ использования переменных .env в Laravel
config()
и почему при чтении значений следует избегать использования вспомогательной функции env()
.При разработке в Laravel обращение к значениям конфигурации и конфиденциальной информации из файла .env
— обычное дело. В этой статье мы рассмотрим важность использования вспомогательной функции config()
и почему при чтении значений следует избегать использования хелпера env()
. Кроме того, мы расскажем, как добавлять собственные переменные env
в конфигурационные файлы и интегрировать их без проблем с помощью хелпера config()
.
Для чтения переменной из файла .env
следует использовать хелпер config()
. Например: config('app.name')
. Значения, доступные для config()
, задаются в конфигурационных файлах в папке /config
. Внутри такого конфигурационного файла они обычно устанавливаются с помощью помощника env()
.
Причина, по которой мы не можем использовать env()
непосредственно в приложении, заключается в том, что она будет возвращать пустые значения всякий раз, когда ваша конфигурация будет кэшироваться. Обратите внимание, что кэширование конфигурации рекомендуется в производственной среде, как указано в документации Laravel. Команда для правильного кэширования конфигурации выглядит следующим образом:
php artisan config:cache
Команда выше инструктирует artisan
генерировать файл /bootstrap/cache/config.php
, который содержит все значения в формате, оптимизированном для повышения быстродействия.
Следующая команда снова очистит кэш, удалив файл /bootstrap/cache/config.php
:
php artisan config:clear
В дополнение к вспомогательной функции config()
вы можете использовать фасад Config
, который также предоставляет Laravel. Это будет выглядеть следующим образом
// Это наиболее распространённый и рекомендуемый способ:
$appName = config('app.name');
// Это эквивалент:
use Illuminate\Support\Facades\Config;
$appName = Config::get('app.name');
// Но избегайте этого:
$appName = env('APP_NAME');
Как добавить собственную переменную Env
в конфигурацию Laravel
Чтобы добавить пользовательскую переменную среды и сделать её доступной во всем приложении, выполните следующие действия:
Откройте файл
.env
и определите пользовательскую переменную следующим образом:YOUR_VARIABLE=value
В папке
config
создайте новый файл (например,custom.php
).Во вновь созданном файле определите массив, который возвращает значение вашей переменной окружения:
<?php
return [
'your_variable' => env('your_variable'),
];Получите доступ к значению переменной с помощью
config()
в коде вашего контроллера:$value = config('custom.your_variable');
Выведите переменную в шаблоне blade:
<a href="{{ config('custom.your_variable') }}">Link</a>
Обратите внимание, что не всегда необходимо создавать новый файл конфигурации. Часто имеет смысл добавить свои настройки в один из существующих. Например, добавление второй базы данных можно добавить в файл database.php
, а добавление REST API с URL и учётными данными для входа лучше всего добавить в файл services.php
. Исчерпывающий список стандартных конфигурационных файлов Laravel смотрите в следующем разделе.
Где находятся файлы конфигурации Laravel по умолчанию
Laravel поставляется с набором конфигурационных файлов по умолчанию. Они содержат значения, используемые для работы фреймворка, и могут быть расширены вашими собственными значениями конфигурации.
Свежая установка Laravel содержит следующие файлы конфигурации:
Файл | Назначение |
---|---|
/config/app.php | Конфигурация параметров на уровне приложения |
/config/auth.php | Конфигурация аутентификации |
/config/broadcasting.php | Конфигурация вещания для вещания событий в реальном времени |
/config/cache.php | Конфигурация кэша |
/config/cors.php | Конфигурация Cross-origin resource sharing (CORS) |
/config/database.php | Подключение к базе данных и настройки конфигурации |
/config/filesystems.php | Конфигурация файловой системы |
/config/hashing.php | Конфигурация хэширования для хэширования паролей |
/config/logging.php | Конфигурация ведения журналов |
/config/mail.php | Конфигурация электронной почты |
/config/queue.php | Конфигурация очереди |
/config/sanctum.ph | Конфигурация для Laravel Sanctum (API аутентификации) |
/config/services.php | Конфигурация для внешних сервисов |
/config/session.php | Конфигурация сессии |
/config/view.php | Конфигурация просмотра/представления |
Зачем нужно использовать файлы конфигурации Laravel
Мы уже обсуждали ограничения использования хелпера env()
с кэшированием. Однако есть несколько дополнительных преимуществ, которые следует рассмотреть.
Причины использовать файлы конфигурации вместо прямого файла .env
следующие:
- Организация: Конфигурационные файлы обеспечивают структурированный способ управления и организации параметров конфигурации. Они позволяют группировать связанные параметры вместе, что облегчает их поиск и обновление.
- Контроль версий: Конфигурационные файлы можно легко отслеживать и управлять ими с помощью систем контроля версий, таких как Git. Это гарантирует, что изменения конфигурации документированы и могут быть отменены в случае необходимости.
- Гибкость: Конфигурационные файлы обладают большей гибкостью по сравнению с файлом .env. Вы можете определять сложные структуры конфигурации, массивы и вложенные значения в конфигурационных файлах, что делает их подходящими для работы с расширенными сценариями конфигурации.
- Настройки для конкретной среды: Конфигурационные файлы Laravel поддерживают настройку для конкретного окружения. Вы можете иметь разные настройки для разных окружений (например, development, production, staging) и легко переключаться между ними без изменения файла
.env
. - Кэширование: Laravel позволяет кэшировать конфигурационные файлы, что может значительно повысить производительность приложения. При прямом использовании файла
.env
кэширование невозможно, и каждое обращение к переменным окружения требует разбора файла, что приводит к перерасходу производительности. - Читабельность кода: Доступ к значениям конфигурации через вспомогательную функцию
config()
обеспечивает лучшую читаемость кода по сравнению с прямым доступом к файлу.env
. Она чётко указывает на то, что вы получаете значение конфигурации, что улучшает сопровождаемость и понимание кода.
Заключение
Использование конфигурационных файлов Laravel является рекомендуемым подходом для доступа к переменным .env
в приложении. Используя вспомогательную функцию config()
, вы можете обеспечить предсказуемое поведение и избежать проблем с пустыми значениями при кэшировании конфигураций. Конфигурационные файлы имеют множество преимуществ, включая лучшую организацию, упрощённый контроль версий, гибкость для сложных конфигураций, настройки для конкретной среды, повышение производительности за счёт кэширования и улучшение читаемости кода. Используя возможности конфигурационной системы Laravel, вы сможете эффективно управлять переменными окружения в приложении, сохраняя при этом чистоту и удобочитаемость кода.