Nette Documentation Preview

syntax
Настройка приложения
********************

.[perex]
Обзор вариантов конфигурации приложения Nette.


Приложение .[#toc-application]
==============================

```neon
application:
	# отображает вкладку "Nette Application" на синем экране Tracy?
	debugger: ...           # (bool) по умолчанию true

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

	# имя презентера ошибок
	errorPresenter: Error   # (string|array) по умолчанию 'Nette:Error'

	# определяет псевдонимы для ведущих и событий
	aliases: ...

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

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

Начиная с версии `nette/application` 3.2 можно определить пару презентеров ошибок:

```neon
application:
	errorPresenter:
		4xx: Error4xx   # для Nette\Application\BadRequestException
		5xx: Error5xx   # для других исключений
```

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

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

Карта [mapping определяет правила |modules#Mapping], по которым имя класса выводится из имени ведущего.


Авторегистрация презентеров .[#toc-automatic-registration-of-presenters]
------------------------------------------------------------------------

Nette автоматически добавляет презентеры как сервисы в контейнер DI, что значительно ускоряет их создание. Как Nette узнает презентеры, можно настроить:

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

	# маска, которая должна соответствовать классу и имени файла
	scanFilter: ...        # (string) по умолчанию '*Presenter'

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

Каталоги, перечисленные в `scanDirs`, не отменяют значение по умолчанию `%appDir%`, а дополняют его, поэтому `scanDirs` будет содержать оба пути `%appDir%` и `%vendorDir%/mymodule`. Чтобы перезаписать каталог по умолчанию, мы используем [восклицательный знак |dependency-injection:configuration#Merging]:

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

Сканирование каталога можно отключить, задав значение `false`. Мы не рекомендуем полностью подавлять автоматическое добавление презентеров, иначе производительность приложения снизится.


Latte
=====

Эта настройка глобально влияет на поведение Latte в компонентах и презентерах.

```neon
latte:
	# отображает вкладку Latte на панели Tracy для основного шаблона (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: cs_CZ        # (string) по умолчанию null

	# класс $this->template
	templateClass: App\MyTemplateClass # по умолчанию Nette\Bridges\ApplicationLatte\DefaultTemplate
```

Если вы используете Latte версии 3, вы можете добавить новое [расширение |latte:creating-extension], используя:

```neon
latte:
	расширения:
		- Latte\Essential\TranslatorExtension(@Nette\Localization\Translator)
```

/--comment











\--


Маршрутизация .[#toc-routing]
=============================

Основные настройки:

```neon
routing:
	# отображает вкладку Routing на панели Tracy?
	debugger: ...   # (bool) по умолчанию true

	# осуществлять сериализацию маршрутов в DI-контейнере?
	cache: ...      # (bool) по умолчанию false
```

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

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


Константы .[#toc-constants]
===========================

Создание констант PHP:

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

Константа `Foobar` будет создана после запуска.

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


PHP
===

Вы можете устанавливать директивы PHP. Обзор всех директив можно найти на сайте [php.net |https://www.php.net/manual/ru/ini.list.php].

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


Услуги DI .[#toc-di-services]
=============================

Эти сервисы добавляются в контейнер DI:

| Имя | Тип | Описание
|----------------------------------------------------------
| `application.application` | [api:Nette\Application\Application] | [full application launcher |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:
	# отображает вкладку "Nette Application" на синем экране Tracy?
	debugger: ...           # (bool) по умолчанию true

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

	# имя презентера ошибок
	errorPresenter: Error   # (string|array) по умолчанию 'Nette:Error'

	# определяет псевдонимы для ведущих и событий
	aliases: ...

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

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

Начиная с версии nette/application 3.2 можно определить пару презентеров ошибок:

application:
	errorPresenter:
		4xx: Error4xx   # для Nette\Application\BadRequestException
		5xx: Error5xx   # для других исключений

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

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

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

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

Nette автоматически добавляет презентеры как сервисы в контейнер DI, что значительно ускоряет их создание. Как Nette узнает презентеры, можно настроить:

application:
	# для поиска презентеров в карте классов Composer?
	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 для основного шаблона (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: cs_CZ        # (string) по умолчанию null

	# класс $this->template
	templateClass: App\MyTemplateClass # по умолчанию Nette\Bridges\ApplicationLatte\DefaultTemplate

Если вы используете Latte версии 3, вы можете добавить новое расширение, используя:

latte:
	расширения:
		- Latte\Essential\TranslatorExtension(@Nette\Localization\Translator)

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

Основные настройки:

routing:
	# отображает вкладку Routing на панели Tracy?
	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 будет создана после запуска.

Константы не должны служить в качестве глобально доступных переменных. Для передачи значений объектам используйте dependency injection.

PHP

Вы можете устанавливать директивы PHP. Обзор всех директив можно найти на сайте php.net.

php:
	date.timezone: Europe/Prague

Услуги DI

Эти сервисы добавляются в контейнер DI:

Имя Тип Описание
application.application Nette\Application\Application full application launcher
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