Безопасный способ использования переменных .env в Laravel

Источник: «The SAFE Way to Use .env Variables in Laravel»
При разработке в Laravel обращение к значениям конфигурации и конфиденциальной информации из файла .env — обычное дело. В этой статье мы рассмотрим важность использования вспомогательной функции 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

Чтобы добавить пользовательскую переменную среды и сделать её доступной во всем приложении, выполните следующие действия:

  1. Откройте файл .env и определите пользовательскую переменную следующим образом:

    YOUR_VARIABLE=value
  2. В папке config создайте новый файл (например, custom.php).

  3. Во вновь созданном файле определите массив, который возвращает значение вашей переменной окружения:

    <?php
    return [
    'your_variable' => env('your_variable'),
    ];
  4. Получите доступ к значению переменной с помощью config() в коде вашего контроллера:

    $value = config('custom.your_variable');
  5. Выведите переменную в шаблоне 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 следующие:

  1. Организация: Конфигурационные файлы обеспечивают структурированный способ управления и организации параметров конфигурации. Они позволяют группировать связанные параметры вместе, что облегчает их поиск и обновление.
  2. Контроль версий: Конфигурационные файлы можно легко отслеживать и управлять ими с помощью систем контроля версий, таких как Git. Это гарантирует, что изменения конфигурации документированы и могут быть отменены в случае необходимости.
  3. Гибкость: Конфигурационные файлы обладают большей гибкостью по сравнению с файлом .env. Вы можете определять сложные структуры конфигурации, массивы и вложенные значения в конфигурационных файлах, что делает их подходящими для работы с расширенными сценариями конфигурации.
  4. Настройки для конкретной среды: Конфигурационные файлы Laravel поддерживают настройку для конкретного окружения. Вы можете иметь разные настройки для разных окружений (например, development, production, staging) и легко переключаться между ними без изменения файла .env.
  5. Кэширование: Laravel позволяет кэшировать конфигурационные файлы, что может значительно повысить производительность приложения. При прямом использовании файла .env кэширование невозможно, и каждое обращение к переменным окружения требует разбора файла, что приводит к перерасходу производительности.
  6. Читабельность кода: Доступ к значениям конфигурации через вспомогательную функцию config() обеспечивает лучшую читаемость кода по сравнению с прямым доступом к файлу .env. Она чётко указывает на то, что вы получаете значение конфигурации, что улучшает сопровождаемость и понимание кода.

Заключение

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

Дополнительные материалы

Предыдущая Статья

Генерация Laravel миграций из существующей базы данных

Следующая Статья

Использование нескольких селекторов в методах селекторов JavaScript