Как да изтеглите конфигурационен файл

Отделните компоненти на 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%.

версия: 3.x