Вступление
Все файлы настроек Laravel хранятся в папке app/config. Каждая настройка задокументирована, поэтому не стесняйтесь изучить эти файлы и познакомиться с возможностями конфигурирования.
Иногда вам нужно прочитать настройку во время работы приложения. Это можно сделать, используя класс PHPConfig
.
Config::get('app.timezone');
Вы можете указать значение по умолчанию, которое будет возвращено, если настройка не существует:
$timezone = Config::get('app.timezone', 'UTC');
Изменение значения во время выполнения
Заметьте, что синтаксис с точкой может использоваться для доступа к разным файлам настроек. Вы также можете установить значения настроек во время выполнения:
Config::set('database.default', 'sqlite');
Значения, установленные таким образом, сохраняются только для текущего запроса и не влияют на более поздние запросы.
Настройки среды
Часто необходимо иметь разные значения для разных настроек в зависимости от среды, в которой выполняется приложение. Например, вы можете захотеть использовать разные драйвера кэша на локальном и производственном серверах. Это легко достигается использованием настроек, зависящих от среды.
Просто создайте внутри config папку с именем вашей среды, таким как local. Затем создайте файлы настроек и укажите в них значения для этой среды, которыми вы перекроете изначальные настройки. Например, вы можете перекрыть драйвер кэша для локальной системы, создав файл cache.php внутри app/config/local с таким содержимым:
<?php
return array(
'driver' => 'file',
);
Не используйте имя testing для названия среды — оно зарезервировано для юнит-тестов.
Заметьте, что вам не нужно указывать каждую настройку, которая есть в конфигурационном файле по умолчанию (app/config/cache.php). Настройки среды будут наложены на эти базовые файлы.
Теперь нам нужно сообщить Laravel, в какой среде он работает. По умолчанию это всегда production. Вы можете настроить другие среды в файле bootstrap/start.php, который находится в корне установки Laravel. В этом файле есть вызов PHP$app->detectEnvironment()
— массив, который ему передаётся, используется для определения текущей среды. Вы можете добавить в него другие среды и имена компьютеров по необходимости.
<?php
$env = $app->detectEnvironment(array(
'local' => array('your-machine-name'),
));
В этом примере local — имя среды, а your-machine-name — имя хоста вашего сервера. В Linux и Mac вы можете определить имя хоста с помощью терминальной команды hostname.
Если вам необходима более гибкая проверка среды, то вы можете передать в метод PHPdetectEnvironment
функцию-замыкание PHPclosure
, что позволит вам делать те проверки, которые вы захотите:
$env = $app->detectEnvironment(function () {
return $_SERVER['MY_LARAVEL_ENV'];
});
Вы можете получить имя текущей среды приложения с помощью метода PHPenvironment
:
$environment = App::environment();
добавлено в 4.1 ()
Также вы можете передавать аргументы в метод PHPenvironment
, чтобы проверить — совпадает ли имя среды с заданным значением:
if (App::environment('local'))
{
// Среда локальная
}
if (App::environment('local', 'staging'))
{
// Среда либо локальная, либо отладочная...
}
Настройка поставщика
При использовании настроек среды вам может понадобиться «дополнить» ваш основной файл настроек app поставщиками услуг среды. Но если вы попробуете это сделать, то заметите, что поставщики из app среды переписывают поставщиков в вашем основном файле настроек app. Чтобы заставить поставщиков добавляться, используйте вспомогательный метод PHPappend_config
в вашем файле app настроек среды:
'providers' => append_config(array(
'LocalOnlyServiceProvider',
))
Защита важных настроек
В «реальных» приложениях рекомендуется хранить все ваши важные настройки вне файла настроек. Такие вещи, как пароль к БД, ключи Stripe API и ключи шифрования должны по возможности храниться вне файла настроек. Так где же нам разместить их? К счастью, Laravel обеспечивает очень простое решение защиты элементов конфигурации такого типа, используя «точечные» файлы.
Сначала настройте ваше приложение, чтобы ваша машина была в «локальной» среде. Затем создайте файл .env.local.php в корне вашего приложения, который обычно совпадает с каталогом хранения вашего файла composer.json. Файл .env.local.php должен возвращать массив пар ключ-значение, так же как обычный файл настроек Laravel:
<?php
return array(
'TEST_STRIPE_KEY' => 'super-secret-sauce',
);
Все возвращаемые этим файлом пары ключ-значение будут автоматически доступны через «суперглобальные» переменные PHP PHP$ _ENV
и PHP$ _SERVER
. Теперь вы можете ссылаться на эти глобальные переменные из ваших файлов настроек:
'key' => $_ENV['TEST_STRIPE_KEY']
Убедитесь, что вы добавили файл .env.local.php в файл .gitignore. Это позволит остальным разработчикам вашей команды создавать свои файлы настроек локальной среды, а также спрячет ваши важные настройки от системы контроля версий.
Теперь на рабочем сервере в корне проекта создайте файл .env.php, содержащий соответствующие значения вашей рабочей среды. Так же как и файл .env.local.php, рабочий файл .env.php никогда не должен включаться в контроль версий.
Вы можете создать файл для каждой среды, поддерживаемой вашим приложением. Например, среда development будет загружать файл .env.development.php, если такой существует. Но среда production всегда использует файл .env.php.
Режим обслуживания
Когда ваше приложение находится в режиме обслуживания (maintenance mode), специальный шаблон будет отображаться вместо всех ваших маршрутов. Это позволяет «отключать» приложение, в момент обновления. Вызов PHPApp::down()
уже содержится в файле app/start/global.php. Возвращённое им значение будет отправлено пользователю, когда приложение находится в режиме обслуживания.
Для включения этого режима просто выполните команду down Artisan:
shphp artisan down
Чтобы выйти из режима обслуживания выполните команду up:
shphp artisan up
Для отображения собственного шаблона в режиме обслуживания вы можете добавить в app/start/global.php подобный код:
App::down(function () {
return Response::view('maintenance', array(), 503);
});
добавлено в 4.1 ()
Если переданная в метод PHPdown
функция-замыкание вернёт PHPNULL
, то для этого запроса режим обслуживания будет проигнорирован.
Режим обслуживания и очереди
Пока ваше приложения находится в режиме обслуживания, не будут обрабатываться никакие задачи очередей. Задачи продолжат обрабатываться как обычно, как только приложение выйдет из режима обслуживания.