Конфигурация приложений

Обзор опций конфигурации для приложений 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
версия: 4.0