Nette Documentation Preview

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

.[perex]
Отделните компоненти на Nette се конфигурират с помощта на конфигурационни файлове. Ще ви покажем как да заредите тези файлове.

.[tip]
Ако използвате цялата рамка, не е необходимо да правите нищо друго. Имате предварително подготвена директория `config/` за конфигурационните файлове във вашия проект, а [зареждащото устройство на приложението |application:bootstrap#DI-Container-Configuration] отговаря за тяхното зареждане.
Тази статия е предназначена за потребители, които използват само една библиотека Nette и искат да се възползват от предимствата на конфигурационните файлове.

Конфигурационните файлове обикновено са написани във формат [NEON |neon:format] и е най-добре да се редактират в [редактори, които го поддържат |best-practices:editors-and-tools#IDE-Editor]. Те могат да се разглеждат като инструкции за **създаване и конфигуриране** на обекти. По този начин резултатът от зареждането на конфигурация ще бъде т.нар. фабрика - обект, който при поискване ще създава други обекти за по-нататъшна употреба. Например връзка с база данни и т.н.

Тази фабрика се нарича още *контейнер за инжектиране на зависимости* (DI-контейнер) и ако се интересувате от подробностите, прочетете главата [Инжектиране на зависимости |dependency-injection:].

Класът [api:Nette\Bootstrap\Configurator] е отговорен за зареждането на конфигурацията и създаването на контейнера, затова първо ще инсталираме неговия пакет `nette/bootstrap`:

```shell
composer require nette/bootstrap
```

И създайте инстанция на класа `Configurator`. Тъй като генерираният DI-контейнер ще бъде кеширан на диска, трябва да зададем пътя до директорията, в която ще бъде съхранен:

```php
$configurator = new Nette\Bootstrap\Configurator;
$configurator->setTempDirectory(__DIR__ . '/temp');
```

В Linux или macOS задайте [разрешение за запис |nette:troubleshooting#Setting-Directory-Permissions] за директорията `temp/`.

И преминаваме към самите конфигурационни файлове. Те се качват с помощта на функцията `addConfig()`:

```php
$configurator->addConfig(__DIR__ . '/database.neon');
```

Ако искате да добавите повече конфигурационни файлове, можете да извикате функцията `addConfig()` няколко пъти. Ако във файловете се появят елементи с еднакви ключове, те ще бъдат презаписани (или [обединени в |dependency-injection:configuration#Merging] случай на масиви). По-късно добавеният файл е с по-висок приоритет от предишния.

Последната стъпка е да създадете контейнер DI:

```php
$container = $configurator->createContainer();
```

И тя вече ще създаде желаните обекти за нас. Например, ако използвате конфигурацията за [Nette Database |database:configuration], можете да я помолите да създаде връзка към базата данни:

```php
$db = $container->getByType(Nette\Database\Connection::class);
//или
$explorer = $container->getByType(Nette\Database\Explorer::class);
//или чрез създаване на множество връзки
$db = $container->getByName('database.main.connection');
```

И сега можете да работите с базата данни!


Режим на разработка и производствен режим .[#toc-development-vs-production-mode]
--------------------------------------------------------------------------------

В режим на разработка контейнерът се актуализира автоматично при всяка промяна на конфигурационните файлове. В производствен режим той се генерира само веднъж и промените не се проверяват.
По този начин режимът за разработчици цели максимално удобство за програмистите, докато производственият режим цели производителност.

Режимът се избира чрез автоматично разпознаване, така че обикновено не е необходимо да конфигурирате или превключвате нещо ръчно. Режимът за разработчици се използва, когато приложението се изпълнява на локалния хост (т.е. IP адресът е `127.0.0.1` или `::1`) и няма прокси сървър (т.е. HTTP заглавието му). В противен случай приложението работи в производствен ("боен") режим.

Ако искате да активирате режима за разработка в други случаи, например когато програмистите имат достъп от определен IP адрес, използвайте `setDebugMode()`:

```php
$configurator->setDebugMode('23.75.345.200');
// може да се зададе и масив от IP адреси
```

Определено препоръчваме да комбинирате IP адреса с файл с бисквитки. Съхранявайте тайния токен, например `secret1234`, в "бисквитката" `nette-debug`, и по този начин ще активирате режима за разработка за програмисти, които имат достъп от определен IP адрес и също така разполагат с токена, посочен в "бисквитката":

```php
$configurator->setDebugMode('secret1234@23.75.345.200');
```

Можете също така да деактивирате напълно режима за разработчици, дори за localhost:

```php
$configurator->setDebugMode(false);
```


Опции .[#toc-parameters]
------------------------

Можете също така да използвате параметрите в конфигурационните файлове, които са дефинирани [под `параметры`. |dependency-injection:configuration#Parameters]

Те могат да се поставят и външно по метода `addDynamicParameters()`:

```php
$configurator->addDynamicParameters([
	'remoteIp' => $_SERVER['REMOTE_ADDR'],
]);
```

Параметърът `projectId` може да бъде посочен в конфигурацията с помощта на обозначението `%projectId%`.


{{leftbar: nette:@menu-topics}}

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

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