Конфигурация

Содержание:


Введение

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


Конфигурация среды

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

Чтобы реализовать идею разделения драйвера или другую, необходимо использовать PHP библиотеку Ванса Лукаса (Vance Lucas) DotEnv. В корневой директории вашего проекта должен располагаться файл .env.example. Если вы устанавливали Ларавел через Composer, то такой файл автоматически был переименован в .env. В других случаях, неоходимо переименовать файл вручную.

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

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

Любая переменная из файла .env может быть перезаписана внешними переменными среды, такими как server-level или system-level переменными среды.

Типы переменный среды

Все переменные в ваших .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, чтобы получить значения из переменных в конфигурационных файлах. По факту, если вы пересмотрите файлы конфигурации Ларавел, вы можете заметить некоторые опции, которые уже используют этот помощник.

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

Скрыть переменный среды от отладчика

Если исключение не перехвачено и значение переменной среды APP_DEBUG true, на странице отладки будут показаны переменные и их значения. В некоторых случаях вы могли бы хотеть скрыть некоторые переменные. Чтобы скрыть переменную, достаточно добавить её в соотвествующий список. Для этого в файле config/app.php найдите опцию debug_blacklist и добавьте туда значение переменной.

Некоторые переменные доступны и для переменных среды и для запросов сервера. В этом случае неоходимо добавить в список обе переменные для $_ENV и $_SERVER:

return [

    // ...

    'debug_blacklist' => [
        '_ENV' => [
            'APP_KEY',
            'DB_PASSWORD',
        ],

        '_SERVER' => [
            'APP_KEY',
            'DB_PASSWORD',
        ],

        '_POST' => [
            'password',
        ],
    ],
];

Доступ к значениям конфигурации

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

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

Чтобы установить значения конфигурации на ходу, передайте соответствующий аргумент в config помощника.

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

Конфигурация кэша

Чтобы ускорить ваше приложение, лучше всего кэшировать все файлы конфигурации в один с использованием команды Artisan config:cache. Такая команда перезапишет все опции в один файл конфигурации, который будет загружаться фреймворков очень быстро.

Вы должны прописать команду php artisan config:cache на активном (production) веб-сервере, как часть разработки маршрутизации. Эта команду не стоит прописывать для локальной копии приложения, в силу того, что параметры часто меняются в процессе разработки.

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

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

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

Чтобы включить режим обслуживания, необходимо выполнить Artisan команду down.

php artisan down

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

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

Можно сделать так, что находясь в режиме обслуживания некоторые IP-адреса могут иметь доступ к приложению. Для этих целей есть опция allow:

php artisan down --allow=127.0.0.1 --allow=192.168.0.0/16

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

php artisan up
Вы можете изменить внешний вид страницы обслуживания. Для этого неоходимо переопределить шаблон для файла resources/views/errors/503.blade.php.

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

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

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

У режива обслуживания есть недосток: при переключении режима несколько секунд приложение будет недоступно. Есть альтернатива, которая включает режим обслужиания мгновенно: Envoyer