Конфигурация на приложения
Преглед на конфигурационните опции за 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 |