Настройка
11.x
.
Почему это важно?
Вступление
Все файлы настроек Laravel хранятся в папке app/config
. Каждая настройка задокументирована, поэтому не стесняйтесь изучить эти файлы и познакомиться с возможностями конфигурирования.
Иногда вам нужно прочитать настройку во время работы приложения. Это можно сделать, используя класс Config
:
Чтение значения настройки
Config::get('app.timezone');
Вы можете указать значение по умолчанию, которое будет возвращено, если настройка не существует:
$timezone = Config::get('app.timezone', 'UTC');
Заметьте, что синтаксис с точкой может использоваться для доступа к разным файлам настроек.
Изменение значения во время выполнения
Config::set('database.default', 'sqlite');
Значения, установленные таким образом, сохраняются только для текущего запроса и не влияют на более поздние запросы.
Настройки среды (the environment)
Часто необходимо иметь разные значения для разных настроек в зависимости от среды, в которой выполняется приложение. Например, вы можете захотеть использовать разные драйвера кэша на локальном и продакшн-серверах. Это легко достигается использованием настроек, зависящих от среды.
Просто создайте внутри config
папку с именем вашей среды, таким как local
. Затем создайте файлы настроек и укажите в них значения для этой среды, которыми вы перекроете изначальные настройки. Например, вы можете перекрыть драйвер кэша для локальной системы, создав файл cache.php
внутри app/config/local
с таким содержимым:
<?php
return array(
'driver' => 'file',
);
Примечание: Не используйте имя 'testing’ для названия среды – оно зарезервировано для юнит-тестов.
Заметьте, что вам не нужно указывать каждую настройку, которая есть в конфигурационном файле по умолчанию (app/config/cache.php
). Настройки среды будут наложены на эти базовые файлы.
Теперь нам нужно сообщить Laravel, в какой среде он работает. По умолчанию это всегда production
. Вы можете настроить другие среды в файле bootstrap/start.php
который находится в корне установки Laravel. В этом файле есть вызов $app->detectEnvironment
– массив, который ему передаётся, используется для определения текущей среды. Вы можете добавить в него другие среды и имена компьютеров по необходимости.
<?php
$env = $app->detectEnvironment(array(
'local' => array('your-machine-name'),
));
В этом примере 'local’ это название среды, а 'your-machine-name’ – это имя вашего компьютера. Чтобы узнать его, в Mac OS или Linux вы можете использовать команду hostname в терминале, а в Windows – зайти в Панель управления – Система.
Если вам нужна бОльшая гибкость в определении среды, Вы можете передать в метод функцию-замыкание (Сlosure) и задавать среду так, как нужно именно вам.
Например, если вы хотите задавать среду в файле .htaccess
, то функция-замыкание будет выглядеть следующим образом:
$env = $app->detectEnvironment(function()
{
return getenv('LARAVEL_ENV');
});
При этом в public/.htaccess
вы добавляете строку с именем среды:
SetEnv LARAVEL_ENV local
Или, если у вас nginx, добавляете в нужный location
fastcgi_param LARAVEL_ENV local;
Получение имени текущей среды
Вы можете получить имя текущей среды с помощью метода environment
:
$environment = App::environment();
Для определения среды вы можете передать аргументы в этот метод:
if (App::environment('local'))
{
// Среда - local
}
if (App::environment('local', 'staging'))
{
// Среда - local ИЛИ staging
}
Дополнительные сервис-провайдеры
Иногда требуется для определенной среды выполнения подгрузить дополнительные сервис-провайдеры. Для этого в конфиг-файле app
определенной среды выполнения, например, config/local/app.php
, используйте хелпер append_config
:
'providers' => append_config(array(
'LocalOnlyServiceProvider',
))
Конфиденциальные конфиги
Часто вам может понадобиться хранить часть конфигурационной информации вне обычных конфигов Laravel. Это могут быть ключи доступа к сторонним API-сервисам, ключи шифрования, логины/пароли для доступа к базам данных – или еще какие-то вещи, которые нужны вам только на конкретно этой машине и вы не хотите, чтобы они светились в репозитории. Laravel предоставляет простое средство для размещения таких конфиденциальных конфигов – хранить их в dot-файлах (имена этих файлов начинаются с точки).
Для этого, во-первых, задайте для данного сервера нужную среду выполнения. Например, это ваша девелоперская машина и среда называется local. Затем в корне проекта (там, где лежит composer.json
) создайте файл .env.local.php
. Этот файл должен возвращать массив значений, так и стандартный конфиг Laravel:
<?php
return array(
'TEST_STRIPE_KEY' => 'super-secret-sauce',
);
Эти значения будут доступны в вашем приложении (например, в конфигах) в суперглобальных переменных $_ENV
и $_SERVER
:
'key' => $_ENV['TEST_STRIPE_KEY']
Для продакшн-сервера файл может называться .env.php
, а может содержать объявленное в bootstrap/start.php
название среды выполнения в своем имени – .env.production.php
Теперь вы можете поместить .env.local.php
в .gitignore
и держать там, например, ваши личные и особенные логины и пароли и название базы данных, не боясь, что после того, как вы сделаете git push
, вашим коллегам придется править конфиги, чтобы приложение заработало у них.
Режим обслуживания
Когда ваше приложение находится в режиме обслуживания (maintenance mode), специальный шаблон будет отображаться вместо всех ваших маршрутов. Это позволяет “отключать” приложение в момент обновления кода или обслуживания базы данных. Вызов App::down
, который задает поведение приложения в этом режиме, уже содержится в файле app/start/global.php
. Возвращённое им значение будет отправлено пользователю, когда приложение находится в режиме обслуживания.
Для включения этого режима просто выполните команду down
Artisan:
php artisan down
Чтобы выйти из режима обслуживания выполните команду up
:
php artisan up
Для отображения собственного шаблона в режиме обслуживания вы можете добавить в app/start/global.php
подобный код:
App::down(function()
{
return Response::view('maintenance', array(), 503);
});
Если функция-замыкание вернет NULL, то режим обслуживания не будет включен и приложение будет работать в обычном режиме.
Режим обслуживания и очереди
Пока ваше приложение находится в режиме обслуживания, очереди не будут обрабатываться. Работа очередей будет возобновлена, когда приложение выйдет из режима обслуживания.