Конфигурирование

Введение

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

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

Среда окружения

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

Для решения этой задачи в корне вашего приложения предусмотрен файл /.env, который содержит основные значения конфигурации. Эти значения считываются файлами конфигурации, расположенными в папке /config, с помощью функции env().

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

Дополнительные файлы окружения

Перед загрузкой переменных окружения приложение проверяет, была ли задана переменная среды APP_ENV извне или указан аргумент CLI --env. В этом случае Imhotep загрузит файл /.env.[APP_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"

Получение значений окружения

Чтобы получить значение переменной окружения, вы можете воспользоваться суперглобальной переменной $__ENV или глобальной функцией env(). Пример из файла /config/app.php:

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

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

Определение текущего окружения

Текущее окружение определяется из переменной APP_ENV.

Безопасность данных

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

Получение значений конфигурации

Для получения значений параметров конфигурации можно воспользоваться фасадом Imhotep\Facades\Config или глобальной функцией config(). Эти функции доступны из любого места вашего приложения:

use Imhotep\Facades\Config;

$value = Config::get('app.name');
$value = config('app.name');

// Вторым параметром задается значение по умолчанию,
// оно будет возвращено если значение в конфигурации отсутствует
$value = Config::get('app.timezone', 'Europe/Moscow');
$value = config('app.timezone', 'Europe/Moscow');

// Вторым значением допустимо передать замыкание, которое вернет значение по умолчанию
$value = config('app.language', function () {
    return 'ru';
});
$value = config('app.language', fn () => 'ru');

Для облегчения восприятия и статического анализа кода доступны типизированные методы получения значения. Если полученное значение не соответствует ожидаемому типу, будет выброшено исключение:

use Imhotep\Facades\Config;

$value = Config::string('config-key');
$value = config()->string('config-key');

$value = Config::int('config-key');
$value = config()->int('config-key');

$value = Config::float('config-key');
$value = config()->float('config-key');

$value = Config::bool('config-key');
$value = config()->bool('config-key');

$value = Config::array('config-key');
$value = config()->array('config-key');

Изменение значений конфигурации

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

use Imhotep\Facades\Config;

Config::set('app.language', 'ru');
config()->set('app.language', 'ru');

// Если необходимо изменить несколько значений
Config::set(['app.language' => 'ru', 'app.locale' => 'ru']);
config()->set(['app.language' => 'ru', 'app.locale' => 'ru']);

Кеширование конфигурации

Для ускорения загрузки приложения на продакшн-сервере рекомендуется объединить все файлы конфигурации в один файл с помощью консольной команды:

php imhotep config:cache

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

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

Чтобы удалить кеш конфигурации, используйте команду:

php imhotep config:clear

Режим отладки

Во время разработки приложения важно получать больше информации об ошибках. Для этого в файле app/config.php значение параметра debug должно быть установлено в true. По умолчанию значение этого параметра настраивается через переменную среды окружения APP_DEBUG из файла .env.

Важно! Когда приложение будет выложено в продакшн, значение параметра debug должно быть false. Если оставить его равным true, существует риск раскрытия конфиденциальных данных пользователям приложения.