Как да изтеглите конфигурационен файл
Отделните компоненти на Nette се конфигурират с помощта на конфигурационни файлове. Ще ви покажем как да заредите тези файлове.
Ако използвате цялата рамка, не е необходимо да правите нищо
друго. Имате предварително подготвена директория config/
за
конфигурационните файлове във вашия проект, а зареждащото устройство
на приложението отговаря за тяхното зареждане. Тази статия е
предназначена за потребители, които използват само една библиотека Nette
и искат да се възползват от предимствата на конфигурационните
файлове.
Конфигурационните файлове обикновено са написани във формат NEON и е най-добре да се редактират в редактори, които го поддържат. Те могат да се разглеждат като инструкции за създаване и конфигуриране на обекти. По този начин резултатът от зареждането на конфигурация ще бъде т.нар. фабрика – обект, който при поискване ще създава други обекти за по-нататъшна употреба. Например връзка с база данни и т.н.
Тази фабрика се нарича още контейнер за инжектиране на зависимости (DI-контейнер) и ако се интересувате от подробностите, прочетете главата Инжектиране на зависимости.
Класът Nette\Bootstrap\Configurator е
отговорен за зареждането на конфигурацията и създаването на
контейнера, затова първо ще инсталираме неговия пакет
nette/bootstrap
:
composer require nette/bootstrap
И създайте инстанция на класа Configurator
. Тъй като генерираният
DI-контейнер ще бъде кеширан на диска, трябва да зададем пътя до
директорията, в която ще бъде съхранен:
$configurator = new Nette\Bootstrap\Configurator;
$configurator->setTempDirectory(__DIR__ . '/temp');
В Linux или macOS задайте разрешение за запис за
директорията temp/
.
И преминаваме към самите конфигурационни файлове. Те се качват с
помощта на функцията addConfig()
:
$configurator->addConfig(__DIR__ . '/database.neon');
Ако искате да добавите повече конфигурационни файлове, можете да
извикате функцията addConfig()
няколко пъти. Ако във файловете се
появят елементи с еднакви ключове, те ще бъдат презаписани (или обединени в случай на
масиви). По-късно добавеният файл е с по-висок приоритет от предишния.
Последната стъпка е да създадете контейнер DI:
$container = $configurator->createContainer();
И тя вече ще създаде желаните обекти за нас. Например, ако използвате конфигурацията за Nette Database, можете да я помолите да създаде връзка към базата данни:
$db = $container->getByType(Nette\Database\Connection::class);
//или
$explorer = $container->getByType(Nette\Database\Explorer::class);
//или чрез създаване на множество връзки
$db = $container->getByName('database.main.connection');
И сега можете да работите с базата данни!
Режим на разработка и производствен режим
В режим на разработка контейнерът се актуализира автоматично при всяка промяна на конфигурационните файлове. В производствен режим той се генерира само веднъж и промените не се проверяват. По този начин режимът за разработчици цели максимално удобство за програмистите, докато производственият режим цели производителност.
Режимът се избира чрез автоматично разпознаване, така че обикновено
не е необходимо да конфигурирате или превключвате нещо ръчно. Режимът
за разработчици се използва, когато приложението се изпълнява на
локалния хост (т.е. IP адресът е 127.0.0.1
или ::1
) и няма прокси
сървър (т.е. HTTP заглавието му). В противен случай приложението работи в
производствен (“боен”) режим.
Ако искате да активирате режима за разработка в други случаи,
например когато програмистите имат достъп от определен IP адрес,
използвайте setDebugMode()
:
$configurator->setDebugMode('23.75.345.200');
// може да се зададе и масив от IP адреси
Определено препоръчваме да комбинирате IP адреса с файл с бисквитки.
Съхранявайте тайния токен, например secret1234
, в “бисквитката”
nette-debug
, и по този начин ще активирате режима за разработка за
програмисти, които имат достъп от определен IP адрес и също така
разполагат с токена, посочен в “бисквитката”:
$configurator->setDebugMode('secret1234@23.75.345.200');
Можете също така да деактивирате напълно режима за разработчици, дори за localhost:
$configurator->setDebugMode(false);
Опции
Можете също така да използвате параметрите в конфигурационните
файлове, които са дефинирани под параметры
.
Те могат да се поставят и външно по метода addDynamicParameters()
:
$configurator->addDynamicParameters([
'remoteIp' => $_SERVER['REMOTE_ADDR'],
]);
Параметърът projectId
може да бъде посочен в конфигурацията с
помощта на обозначението %projectId%
.