Nette Documentation Preview

syntax
Конфігурація застосунків
************************

.[perex]
Огляд конфігураційних опцій для застосунків Nette.


Application
===========

```neon
application:
	# показувати панель "Nette Application" у Tracy BlueScreen?
	debugger: ...           # (bool) за замовчуванням true

	# чи буде при помилці викликатися error-presenter?
	# має ефект лише в режимі розробки
	catchExceptions: ...    # (bool) за замовчуванням true

	# назва error-presenter
	errorPresenter: Error   # (string|array) за замовчуванням 'Nette:Error'

	# визначає аліаси для презентерів та дій
	aliases: ...

	# визначає правила для перекладу назви presenter на клас
	mapping: ...

	# неправильні посилання не генерують попередження?
	# має ефект лише в режимі розробки
	silentLinks: ...        # (bool) за замовчуванням false
```

Починаючи з версії `nette/application` 3.2, можна визначити пару error-presenter'ів:

```neon
application:
	errorPresenter:
		4xx: Error4xx   # для винятку Nette\Application\BadRequestException
		5xx: Error5xx   # для інших винятків
```

Опція `silentLinks` визначає, як Nette поводитиметься в режимі розробки, коли генерація посилання зазнає невдачі (наприклад, тому що не існує presenter тощо). Стандартне значення `false` означає, що Nette викине помилку `E_USER_WARNING`. Встановлення на `true` призведе до придушення цього повідомлення про помилку. У робочому середовищі `E_USER_WARNING` викликається завжди. Цю поведінку можна також контролювати, встановивши змінну presenter [$invalidLinkMode |creating-links#Недійсні посилання].

[Аліаси спрощують посилання |creating-links#Аліаси] на часто використовувані презентери.

[Мапінг визначає правила |directory-structure#Мапінг presenter ів], за якими з назви presenter виводиться назва класу.


Автоматична реєстрація презентерів
----------------------------------

Nette автоматично додає презентери як сервіси до DI-контейнера, що суттєво прискорює їхнє створення. Як Nette знаходить презентери, можна налаштувати:

```neon
application:
	# шукати презентери в Composer class map?
	scanComposer: ...      # (bool) за замовчуванням true

	# маска, якій має відповідати назва класу та файлу
	scanFilter: ...        # (string) за замовчуванням '*Presenter'

	# у яких каталогах шукати презентери?
	scanDirs:              # (string[]|false) за замовчуванням '%appDir%'
		- %vendorDir%/mymodule
```

Каталоги, зазначені в `scanDirs`, не перезаписують стандартне значення `%appDir%`, а доповнюють його, отже `scanDirs` міститиме обидва шляхи `%appDir%` та `%vendorDir%/mymodule`. Якщо ми хочемо виключити стандартний каталог, використаємо [знак оклику |dependency-injection:configuration#Об єднання], який перезапише значення:

```neon
application:
	scanDirs!:
		- %vendorDir%/mymodule
```

Сканування каталогів можна вимкнути, вказавши значення false. Не рекомендуємо повністю придушувати автоматичне додавання презентерів, оскільки інакше це призведе до зниження швидкодії застосунку.


Шаблони Latte
=============

За допомогою цього налаштування можна глобально вплинути на поведінку Latte в компонентах та презентерах.

```neon
latte:
	# показувати панель Latte в Tracy Bar для головного шаблону (true) або всіх компонентів (all)?
	debugger: ...        # (true|false|'all') за замовчуванням true

	# генерує шаблони із заголовком declare(strict_types=1)
	strictTypes: ...     # (bool) за замовчуванням false

	# вмикає режим [суворого парсера |latte:develop#striktní režim]
	strictParsing: ...   # (bool) за замовчуванням false

	# активує [перевірку згенерованого коду |latte:develop#Kontrola vygenerovaného kódu]
	phpLinter: ...       # (string) за замовчуванням null

	# встановлює локаль
	locale: cs_CZ        # (string) за замовчуванням null

	# клас об'єкта $this->template
	templateClass: App\MyTemplateClass # за замовчуванням Nette\Bridges\ApplicationLatte\DefaultTemplate
```

Якщо ви використовуєте Latte версії 3, ви можете додавати нові [розширення |latte:extending-latte#Latte Extension] за допомогою:

```neon
latte:
	extensions:
		- Latte\Essential\TranslatorExtension(@Nette\Localization\Translator)
```

Якщо ви використовуєте Latte версії 2, ви можете реєструвати нові теги, вказавши ім'я класу або посилання на сервіс. За замовчуванням викликається метод `install()`, але це можна змінити, вказавши ім'я іншого методу:

```neon
latte:
	# реєстрація користувацьких тегів Latte
	macros:
		- App\MyLatteMacros::register         # статичний метод, назва класу або callable
		- @App\MyLatteMacrosFactory           # сервіс з методом install()
		- @App\MyLatteMacrosFactory::register # сервіс з методом register()

services:
	- App\MyLatteMacrosFactory
```


Маршрутизація
=============

Основні налаштування:

```neon
routing:
	# показувати панель маршрутизації в Tracy Bar?
	debugger: ...   # (bool) за замовчуванням true

	# серіалізує маршрутизатор до DI-контейнера
	cache: ...      # (bool) за замовчуванням false
```

Маршрутизацію зазвичай визначаємо в класі [RouterFactory |routing#Колекція маршрутів]. Альтернативно, маршрути можна визначити також у конфігурації за допомогою пар `маска: дія`, але цей спосіб не пропонує такої широкої варіативності в налаштуваннях:

```neon
routing:
	routes:
		'detail/<id>': Admin:Home:default
		'<presenter>/<action>': Front:Home:default
```


Константи
=========

Створення PHP-констант.

```neon
constants:
	Foobar: 'baz'
```

Після запуску застосунку буде створена константа `Foobar`.

.[note]
Константи не повинні слугувати як якісь глобально доступні змінні. Для передачі значень в об'єкти використовуйте [впровадження залежностей |dependency-injection:passing-dependencies].


PHP
===

Налаштування директив PHP. Огляд усіх директив ви знайдете на [php.net |https://www.php.net/manual/en/ini.list.php].

```neon
php:
	date.timezone: Europe/Prague
```


Сервіси DI
==========

Ці сервіси додаються до DI-контейнера:

| Назва           | Тип                        | Опис
|----------------------------------------------------------
| `application.application`	     | [api:Nette\Application\Application]      |  [запускач усього застосунку |how-it-works#Nette Application]
| `application.linkGenerator`    | [api:Nette\Application\LinkGenerator]    |  [LinkGenerator |creating-links#LinkGenerator]
| `application.presenterFactory` | [api:Nette\Application\PresenterFactory] |  фабрика презентерів
| `application.###`              | [api:Nette\Application\UI\Presenter]     |  окремі презентери
| `latte.latteFactory`           | [api:Nette\Bridges\ApplicationLatte\LatteFactory] | фабрика об'єкта `Latte\Engine`
| `latte.templateFactory`        | [api:Nette\Application\UI\TemplateFactory] | фабрика для [`$this->template` |templates]

Конфігурація застосунків

Огляд конфігураційних опцій для застосунків Nette.

Application

application:
	# показувати панель "Nette Application" у Tracy BlueScreen?
	debugger: ...           # (bool) за замовчуванням true

	# чи буде при помилці викликатися error-presenter?
	# має ефект лише в режимі розробки
	catchExceptions: ...    # (bool) за замовчуванням true

	# назва error-presenter
	errorPresenter: Error   # (string|array) за замовчуванням 'Nette:Error'

	# визначає аліаси для презентерів та дій
	aliases: ...

	# визначає правила для перекладу назви presenter на клас
	mapping: ...

	# неправильні посилання не генерують попередження?
	# має ефект лише в режимі розробки
	silentLinks: ...        # (bool) за замовчуванням false

Починаючи з версії nette/application 3.2, можна визначити пару error-presenter'ів:

application:
	errorPresenter:
		4xx: Error4xx   # для винятку Nette\Application\BadRequestException
		5xx: Error5xx   # для інших винятків

Опція silentLinks визначає, як Nette поводитиметься в режимі розробки, коли генерація посилання зазнає невдачі (наприклад, тому що не існує presenter тощо). Стандартне значення false означає, що Nette викине помилку E_USER_WARNING. Встановлення на true призведе до придушення цього повідомлення про помилку. У робочому середовищі E_USER_WARNING викликається завжди. Цю поведінку можна також контролювати, встановивши змінну presenter $invalidLinkMode.

Аліаси спрощують посилання на часто використовувані презентери.

Мапінг визначає правила, за якими з назви presenter виводиться назва класу.

Автоматична реєстрація презентерів

Nette автоматично додає презентери як сервіси до DI-контейнера, що суттєво прискорює їхнє створення. Як Nette знаходить презентери, можна налаштувати:

application:
	# шукати презентери в Composer class map?
	scanComposer: ...      # (bool) за замовчуванням true

	# маска, якій має відповідати назва класу та файлу
	scanFilter: ...        # (string) за замовчуванням '*Presenter'

	# у яких каталогах шукати презентери?
	scanDirs:              # (string[]|false) за замовчуванням '%appDir%'
		- %vendorDir%/mymodule

Каталоги, зазначені в scanDirs, не перезаписують стандартне значення %appDir%, а доповнюють його, отже scanDirs міститиме обидва шляхи %appDir% та %vendorDir%/mymodule. Якщо ми хочемо виключити стандартний каталог, використаємо знак оклику, який перезапише значення:

application:
	scanDirs!:
		- %vendorDir%/mymodule

Сканування каталогів можна вимкнути, вказавши значення false. Не рекомендуємо повністю придушувати автоматичне додавання презентерів, оскільки інакше це призведе до зниження швидкодії застосунку.

Шаблони Latte

За допомогою цього налаштування можна глобально вплинути на поведінку Latte в компонентах та презентерах.

latte:
	# показувати панель Latte в Tracy Bar для головного шаблону (true) або всіх компонентів (all)?
	debugger: ...        # (true|false|'all') за замовчуванням true

	# генерує шаблони із заголовком declare(strict_types=1)
	strictTypes: ...     # (bool) за замовчуванням false

	# вмикає режим [суворого парсера |latte:develop#striktní režim]
	strictParsing: ...   # (bool) за замовчуванням false

	# активує [перевірку згенерованого коду |latte:develop#Kontrola vygenerovaného kódu]
	phpLinter: ...       # (string) за замовчуванням null

	# встановлює локаль
	locale: cs_CZ        # (string) за замовчуванням null

	# клас об'єкта $this->template
	templateClass: App\MyTemplateClass # за замовчуванням Nette\Bridges\ApplicationLatte\DefaultTemplate

Якщо ви використовуєте Latte версії 3, ви можете додавати нові розширення за допомогою:

latte:
	extensions:
		- Latte\Essential\TranslatorExtension(@Nette\Localization\Translator)

Якщо ви використовуєте Latte версії 2, ви можете реєструвати нові теги, вказавши ім'я класу або посилання на сервіс. За замовчуванням викликається метод install(), але це можна змінити, вказавши ім'я іншого методу:

latte:
	# реєстрація користувацьких тегів Latte
	macros:
		- App\MyLatteMacros::register         # статичний метод, назва класу або callable
		- @App\MyLatteMacrosFactory           # сервіс з методом install()
		- @App\MyLatteMacrosFactory::register # сервіс з методом register()

services:
	- App\MyLatteMacrosFactory

Маршрутизація

Основні налаштування:

routing:
	# показувати панель маршрутизації в Tracy Bar?
	debugger: ...   # (bool) за замовчуванням true

	# серіалізує маршрутизатор до DI-контейнера
	cache: ...      # (bool) за замовчуванням false

Маршрутизацію зазвичай визначаємо в класі RouterFactory. Альтернативно, маршрути можна визначити також у конфігурації за допомогою пар маска: дія, але цей спосіб не пропонує такої широкої варіативності в налаштуваннях:

routing:
	routes:
		'detail/<id>': Admin:Home:default
		'<presenter>/<action>': Front:Home:default

Константи

Створення PHP-констант.

constants:
	Foobar: 'baz'

Після запуску застосунку буде створена константа Foobar.

Константи не повинні слугувати як якісь глобально доступні змінні. Для передачі значень в об'єкти використовуйте впровадження залежностей.

PHP

Налаштування директив PHP. Огляд усіх директив ви знайдете на php.net.

php:
	date.timezone: Europe/Prague

Сервіси DI

Ці сервіси додаються до DI-контейнера:

Назва Тип Опис
application.application Nette\Application\Application запускач усього застосунку
application.linkGenerator Nette\Application\LinkGenerator LinkGenerator
application.presenterFactory Nette\Application\PresenterFactory фабрика презентерів
application.### Nette\Application\UI\Presenter окремі презентери
latte.latteFactory Nette\Bridges\ApplicationLatte\LatteFactory фабрика об'єкта Latte\Engine
latte.templateFactory Nette\Application\UI\TemplateFactory фабрика для $this->template