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

Преглед на конфигурационните опции за 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 ще потисне това съобщение за грешка. В продукционна среда 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
	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         # статичен метод, 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.

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

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