Любите загадки? Событие еще доступно на сайте.
Поддержите нас - каждый вклад важен!
Поддержите нас - каждый вклад важен!

Настройка

Вы просматриваете документ для прошлой версии.
Рассмотрите возможность обновления вашего проекта до актуальной версии 10.x. Почему это важно?

Введение

Все файлы настроек Laravel хранятся в папке config. Каждая настройка задокументирована, поэтому не стесняйтесь изучить эти файлы и познакомиться с доступными возможностями конфигурирования.

Настройка среды

Часто необходимо иметь разные значения для различных настроек в зависимости от среды, в которой выполняется приложение. Например, вы можете захотеть использовать разные драйвера кэша на локальном и продакшн-сервере.

Для этого в Laravel используется PHP-библиотека DotEnv от Ванса Лукаса. В свежей инсталляции Laravel в корне вашего приложения будет файл .env.example. Если вы установили Laravel с помощью Composer, этот файл будет автоматически переименован в .env. Если же этого не произошло – вам необходимо сделать это вручную.

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

Если вы работаете в команде, то, возможно, вам захочется и дальше поставлять файл .env.example с вашим приложением. Поместив примеры значений в этот файл, вы дадите понять другим разработчикам, какие переменные среды необходимы для запуска вашего приложения. Также вы можете создать файл .env.testing. Этот файл переопределит значения файла .env при запуске тестов PHPUnit и при выполнении Artisan-команд с ключом --env=testing.

Любую переменную в вашем .env файле можно переопределить при помощи переменных внешней среды, таких как переменные на уровне сервера или на системном уровне.

Чтение настроек среды

Все перечисленные в этом файле переменные будут загружены в супер-глобальную переменную PHP $_ENV , когда ваше приложение получит запрос. Но вы можете использовать хелпер env для получения значений этих переменных в ваших конфигурационных файлах. На самом деле, если вы заглянете в файлы настроек Laravel, то заметите несколько опций, уже использующих эту функцию:

'debug' => env('APP_DEBUG', false),

Второе значение, передаваемое функции env – значение по-умолчанию. Оно будет использовано, если нет такой переменной среды для переданного ключа.

Определение текущей среды

Текущая среда приложения определяется по переменной APP_ENV файла .env. Вы можете получить это значение методом environment фасада App:

$environment = App::environment();

Также вы можете передавать аргументы в метод environment , чтобы проверить — совпадает ли имя среды с заданным значением. Метод вернёт true, если среда совпадёт с любым из них:

if (App::environment('local')) {
    // The environment is local
}

if (App::environment(['local', 'staging'])) {
    // The environment is either local OR staging...
}

Определение текущей среды приложения можно переопределить переменной среды APP_ENV на уровне сервера. Это может быть полезно, когда вам нужно использовать одно и то же приложение для разных настроек среды, поэтому вы можете настроить переданный хост для соответствия данной среде в настройках вашего сервера.

Чтение значений настроек

Вы можете легко обращаться к значениям настроек с помощью глобального хелпера config из любого места в вашем приложении. К значениям настроек можно обращаться, используя “точечный” синтаксис, в который входит имя файла и название опции. При этом можно указать значение по умолчанию, которое будет возвращено при отсутствии запрашиваемой опции:

$value = config('app.timezone');

Для задания значений настроек во время выполнения передайте массив в хелпер config:

config(['app.timezone' => 'America/Chicago']);

Кэширование настроек

Для повышения скорости работы вашего приложения вы можете кэшировать все файлы настроек в единый файл с помощью Artisan-команды config:cache. Она объединит все параметры настроек вашего приложения в единый файл, который будет быстро загружен фреймворком.

У вас должно войти в привычку запускать команду php artisan config:cache как типичную часть разработки. Не стоит запускать эту команду в процессе локальной разработки, так как при этом часто требуется изменять параметры настроек в процессе разработки вашего приложения.

Если вы выполняете команду config:cache во время процесса развёртывания, вы должны быть уверены, что вызываете функцию env только из ваших файлов настроек.

Режим обслуживания

Когда ваше приложение находится в режиме обслуживания, для всех запросов в вашем приложении будет отображаться специальный шаблон. Это позволяет легко «отключать» приложение во время его обновления или при обслуживании. Проверка режима обслуживания включена в стандартный набор посредников для вашего приложения. Когда приложение находится в режиме обслуживания, будет брошено исключение MaintenanceModeException с кодом состояния 503.

Для включения этого режима просто выполните Artisan-команду down:

php artisan down

Также вы можете передать в команду down опции message и retry. Значение message можно использовать для вывода или записи в журнал необходимого сообщения, а значение retry будет задано в качестве значения HTTP-заголовка Retry-After:

php artisan down --message="Upgrading Database" --retry=60

Чтобы выйти из режима обслуживания выполните команду up:

php artisan up

Вы можете кастомизировать шаблон режима по-умолчанию, определив собственный шаблон в resources/views/errors/503.blade.php.

Режим обслуживания и очереди

Пока ваше приложение находится в режиме обслуживания, не будут обрабатываться никакие задачи очередей. Задачи продолжат обрабатываться как обычно, как только приложение выйдет из режима обслуживания.

Альтернативы режиму обслуживания

Поскольку для режима обслуживания необходима остановка вашего приложения на несколько секунд, рассмотрите такие альтернативы, как Envoyer, чтобы обеспечить обновление на лету с Laravel.