Конфигурация Laravel
- Введение
- Конфигурация среды окружения
- Доступ к значениям переменных конфигурации
- Кэширование конфигурации
- Режим обслуживания
Введение
Все файлы конфигурации для фреймворка Laravel хранятся в каталоге config
. Каждый параметр задокументирован, поэтому не стесняйтесь просматривать файлы и знакомиться с доступными вам вариантами использования средств, предоставляемых фреймворком.
Конфигурация среды окружения
Часто бывает полезно иметь разные значения конфигурации в зависимости от среды, в которой выполняется приложение. Например, вы можете захотеть использовать локально другой драйвер кеша, чем тот, который используется на рабочем сервере.
Чтобы упростить это, Laravel использует библиотеку DotEnv PHP от Ванса Лукаса. В новой установке Laravel корневой каталог вашего приложения будет содержать файл .env.example
. Если вы устанавливаете Laravel через Composer, этот файл будет автоматически скопирован в .env
. В противном случае вам следует скопировать файл вручную.
Ваш файл .env
не должен быть привязан к системе контроля версий вашего приложения, поскольку каждому разработчику / серверу, использующему ваше приложение, может потребоваться другая конфигурация среды. Более того, это будет угрозой безопасности в случае, если злоумышленник получит доступ к вашему репозиторию системы управления версиями, поскольку любые конфиденциальные учетные данные будут раскрыты.
Если вы разрабатываете приложение на Laravel в команде, вы можете продолжить включение файла .env.example
в свое приложение. Помещая значения-заполнители в пример файла конфигурации, другие разработчики в вашей команде могут четко видеть, какие переменные среды необходимы для запуска вашего приложения. Вы также можете создать файл .env.testing
. Этот файл заменит файл .env
при запуске тестов PHPUnit или выполнении команд Artisan с параметром --env=testing
.
Любая переменная в вашем файле
.env
может быть переопределена внешними переменными среды, такими как переменные среды на уровне сервера или системы.
Типы переменных среды окружения
Все переменные в ваших файлах .env
анализируются как строки, поэтому были созданы некоторые зарезервированные значения, позволяющие вам возвращать более широкий диапазон типов из функции env()
:
Значения .env |
Значения env() |
true | (bool) true |
(true) | (bool) true |
false | (bool) false |
(false) | (bool) false |
empty | (string) '' |
(empty) | (string) '' |
null | (null) null |
(null) | (null) null |
Если вам нужно определить переменную среды со значением, содержащим пробелы, вы можете сделать это, заключив значение в двойные кавычки.
APP_NAME="My Application"
Получение конфигурации среды окружения
Все переменные, перечисленные в этом файле, будут загружены в глобальный массив PHP с переменными окружения $_ENV
, когда ваше приложение получит запрос. Однако вы можете использовать хэлпер env
для получения значений из этих переменных, содержащихся в ваших файлах конфигурации. Фактически, если вы просмотрите файлы конфигурации Laravel, вы заметите несколько опций, уже использующих этот хэлпер:
'debug' => env('APP_DEBUG', false),
Второе значение, переданное функции env
, - это «значение по умолчанию». Это значение будет использоваться, если для данного ключа не существует переменной среды.
Определение текущей среды окружения
Текущая среда приложения определяется с помощью переменной APP_ENV
из вашего файла .env
. Вы можете получить доступ к этому значению с помощью метода environment
на App
facade:
$environment = App::environment();
Вы также можете передать аргументы методу environment
, чтобы проверить, соответствует ли среда заданному значению. Метод вернет истину, если среда соответствует любому из заданных значений:
if (App::environment('local')) {
// Среда окружения local
}
if (App::environment(['local', 'staging'])) {
// Среда либо local, либо local...
}
Обнаружение текущей среды приложения может быть отменено переменной среды
APP_ENV
на уровне сервера. Это может быть полезно, когда вам нужно совместно использовать одно и то же приложение для разных конфигураций среды, чтобы вы могли настроить данный хост в соответствии с данной средой в конфигурациях вашего сервера.
Скрытие переменных среды окружения со страниц отладки
Когда исключение не перехвачено и переменная среды APP_DEBUG
имеет значение true
, на странице отладки будут показаны все переменные среды и их содержимое. В некоторых случаях вы можете захотеть скрыть определенные переменные. Вы можете сделать это, обновив параметр debug_hide
в файле конфигурации config/app.php
.
Некоторые переменные доступны как в переменных среды, так и в данных сервера / запроса. Следовательно, вам может потребоваться скрыть их как для $_ENV
, так и для $_SERVER
:
return [
// ...
'debug_hide' => [
'_ENV' => [
'APP_KEY',
'DB_PASSWORD',
],
'_SERVER' => [
'APP_KEY',
'DB_PASSWORD',
],
'_POST' => [
'password',
],
],
];
Доступ к значениям переменных конфигурации
Вы можете легко получить доступ к своим значениям конфигурации с помощью глобальной вспомогательной функции config
из любого места вашего приложения. Доступ к значениям конфигурации можно получить с помощью синтаксиса «точка», который включает имя файла и параметр, к которому вы хотите получить доступ. Также может быть указано значение по умолчанию, которое будет возвращено, если параметр конфигурации не существует:
$value = config('app.timezone');
// Получить значение по умолчанию, если значение конфигурации не существует...
$value = config('app.timezone', 'Asia/Seoul');
Чтобы установить значения конфигурации во время выполнения, передайте массив хэлперу config
:
config(['app.timezone' => 'America/Chicago']);
Кэширование конфигурации
Чтобы повысить скорость своего приложения, вы должны кэшировать все файлы конфигурации в один файл с помощью Artisan-команды config:cache
. Это объединит все параметры конфигурации вашего приложения в один файл, который будет быстро загружен фреймворком.
Обычно вам следует запускать команду php artisan config:cache
как часть процедуры развертывания в производственной среде. Команду не следует запускать во время локальной разработки, поскольку параметры конфигурации часто нужно будет изменять в ходе разработки вашего приложения.
Если вы выполняете команду
config:cache
во время процесса развертывания, вы должны быть уверены, что вызываете функциюenv
только из ваших файлов конфигурации. После кэширования конфигурации файл.env
не будет загружен, и все вызовы функцииenv
вернут значениеnull
.
Режим обслуживания
Когда ваше приложение находится в режиме обслуживания, для всех запросов к вашему приложению будет отображаться настраиваемое представление. Это позволяет легко «отключить» ваше приложение во время его обновления или во время обслуживания. Проверка режима обслуживания включена в стек промежуточного программного обеспечения по умолчанию для вашего приложения. Если приложение находится в режиме обслуживания, будет выброшено исключение MaintenanceModeException
с кодом состояния 503.
Чтобы включить режим обслуживания, выполните Artisan-команду down
:
php artisan down
Вы также можете указать опцию retry
для команды down
, которая будет установлена как значение HTTP-заголовка Retry-After
:
php artisan down --retry=60
Обход режима обслуживания
Даже находясь в режиме обслуживания, вы можете использовать опцию secret
, чтобы указать токен обхода режима обслуживания:
php artisan down --secret="1630542a-246b-4b66-afa1-dd72a4c43515"
После перевода приложения в режим обслуживания вы можете перейти к URL-адресу приложения, соответствующему этому токену, и Laravel выдаст вашему браузеру файл cookie обхода режима обслуживания:
https://example.com/1630542a-246b-4b66-afa1-dd72a4c43515
При доступе к этому скрытому маршруту вы будете перенаправлены в корень /
приложения. Как только cookie будет отправлен вашему браузеру, вы сможете просматривать приложение в обычном режиме, как если бы оно не находилось в режиме обслуживания. Что очень удобно для проведения наладочных работ так, чтобы пользователи приложения их не видели, получая страницу с сообщением о том, что приложение находится в режиме обслужживания.
Предварительная визуализация представления режима обслуживания
Если вы используете команду php artisan down
во время развертывания, ваши пользователи могут иногда сталкиваться с ошибками, если они обращаются к приложению во время обновления ваших зависимостей Composer или других компонентов инфраструктуры. Это происходит потому, что значительная часть инфраструктуры Laravel должна загружаться, чтобы определить, находится ли ваше приложение в режиме обслуживания, и отобразить представление режима обслуживания с помощью механизма шаблонов.
По этой причине Laravel позволяет предварительно отобразить представление режима обслуживания, которое будет возвращено в самом начале цикла запроса. Это представление отображается перед загрузкой любой из зависимостей вашего приложения. Вы можете выполнить предварительный рендеринг шаблона по вашему выбору, используя опцию render
команды down
:
php artisan down --render="errors::503"
Перенаправление запросов режима обслуживания
В режиме обслуживания Laravel будет отображать представление режима обслуживания для всех URL-адресов приложений, к которым пользователь пытается получить доступ. Если хотите, вы можете указать Laravel перенаправлять все запросы на определенный URL. Это может быть выполнено с помощью опции redirect
. Например, вы можете перенаправить все запросы на /
URI:
php artisan down --redirect=/
Отключение режима обслуживания
Чтобы отключить режим обслуживания и вывода приложения в рабочий режим, используйте команду up
:
php artisan up
Вы можете настроить шаблон режима обслуживания по умолчанию, определив свой собственный шаблон в файле
resources/views/errors/503.blade.php
.
Режим обслуживания и очереди
Пока ваше приложение находится в режиме обслуживания, задания в очереди не обрабатываются. Задания продолжат обрабатываться в обычном режиме после выхода приложения из режима обслуживания.
Альтернативы режиму обслуживания
Поскольку режим обслуживания требует, чтобы ваше приложение простояло на паузе несколько секунд, рассмотрите альтернативы, такие как Envoyer, для выполнения развертывания с нулевым временем простоя с помощью Laravel.
Перевод:
https://laravel.com/docs/8.x/configuration
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)