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: ...

	# определяет правила для перевода имени презентера в класс
	mapping: ...

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

Начиная с версии `nette/application` 3.2, можно определить пару error-presenter'ов:

```neon
application:
	errorPresenter:
		4xx: Error4xx   # для исключения Nette\Application\BadRequestException
		5xx: Error5xx   # для остальных исключений
```

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

[Псевдонимы упрощают создание ссылок |creating-links#Псевдонимы] на часто используемые презентеры.

[Маппинг определяет правила |directory-structure#Маппинг презентеров], по которым из имени презентера выводится имя класса.


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

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#strict-mode]
	strictParsing: ...   # (bool) по умолчанию false

	# активирует [проверку сгенерированного кода |latte:develop#checking-generated-code]
	phpLinter: ...       # (string) по умолчанию null

	# устанавливает локаль
	locale: ru_RU        # (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         # статический метод, classname или 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: ...

	# определяет правила для перевода имени презентера в класс
	mapping: ...

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

Начиная с версии nette/application 3.2, можно определить пару error-presenter'ов:

application:
	errorPresenter:
		4xx: Error4xx   # для исключения Nette\Application\BadRequestException
		5xx: Error5xx   # для остальных исключений

Опция silentLinks определяет, как Nette поведет себя в режиме разработки, если генерация ссылки не удалась (например, потому что презентер не существует и т. д.). Значение по умолчанию false означает, что Nette выбросит ошибку E_USER_WARNING. Установка на true подавит это сообщение об ошибке. В production-среде E_USER_WARNING всегда будет вызываться. Это поведение также можно контролировать, установив переменную презентера $invalidLinkMode.

Псевдонимы упрощают создание ссылок на часто используемые презентеры.

Маппинг определяет правила, по которым из имени презентера выводится имя класса.

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

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#strict-mode]
	strictParsing: ...   # (bool) по умолчанию false

	# активирует [проверку сгенерированного кода |latte:develop#checking-generated-code]
	phpLinter: ...       # (string) по умолчанию null

	# устанавливает локаль
	locale: ru_RU        # (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         # статический метод, classname или 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