Безопасный способ использования переменных .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, вы сможете эффективно управлять переменными окружения в приложении, сохраняя при этом чистоту и удобочитаемость кода.