Конфигурация приложения
Обзор параметров конфигурации Nette Application.
Application
application:
# показывать панель "Nette Application" в Tracy BlueScreen?
debugger: ... # (bool) включено при наличии Tracy
# в продакшене исключения всегда обрабатывает error-презентер;
# этот параметр лишь включает такое поведение и в режиме разработки
catchExceptions: ... # (bool) по умолчанию false, то есть выключено в dev, всегда включено в продакшене
# имя error-презентера
errorPresenter: Error # (string|array) по умолчанию 'Nette:Error'
# задаёт псевдонимы презентеров и действий
aliases: ...
# задаёт правила преобразования имени презентера в класс
mapping: ...
# подавлять предупреждения о некорректных ссылках?
# действует только в режиме разработки
silentLinks: ... # (bool) по умолчанию false
Начиная с версии nette/application 3.2 можно задать пару
error-презентеров:
application:
errorPresenter:
4xx: Error4xx # для Nette\Application\BadRequestException
5xx: Error5xx # для остальных исключений
Разделять их полезно, потому что эти две ситуации принципиально
различны. BadRequestException (коды 4xx) означает, что с приложением всё в
порядке и просто посетитель запросил то, чего не существует. Поэтому вы
можете использовать полноценный презентер, показывающий дружелюбное
сообщение в макете вашего сайта. Напротив, ошибка 5xx означает, что в
приложении что-то сломалось и вы не знаете что. Держите презентер для 5xx
максимально простым, чтобы при его отрисовке уже ничто не могло
отказать: в идеале он не должен трогать ни базу данных, ни макет, ни
вошедшего пользователя.
Параметр silentLinks определяет, как ведёт себя Nette в режиме
разработки, когда порождение ссылки не удаётся (например, потому что
презентера не существует). Значение по умолчанию false означает,
что Nette выдаёт ошибку E_USER_WARNING. Значение true подавляет это
сообщение. В производственной среде E_USER_WARNING выдаётся всегда. На
это поведение можно повлиять и переменной презентера $invalidLinkMode.
Псевдонимы упрощают обращение к часто используемым презентерам.
Mapping задаёт правила, по которым имя класса выводится из имени презентера.
Автоматическая регистрация презентеров
Nette автоматически добавляет презентеры как сервисы в DI-контейнер, что заметно ускоряет их создание. То, как Nette находит презентеры, можно настроить:
application:
# искать презентеры в class map Composer?
scanComposer: ... # (bool) по умолчанию true
# маска, которой должны соответствовать имя класса и имя файла
scanFilter: ... # (string) по умолчанию '*Presenter'
# в каких каталогах искать презентеры?
scanDirs: # (string[]|false) по умолчанию '%appDir%'
- %vendorDir%/mymodule
Каталоги, перечисленные в scanDirs, не заменяют значение по
умолчанию %appDir%, а дополняют его, поэтому в scanDirs окажутся
оба пути: %appDir% и %vendorDir%/mymodule. Если мы хотим обойтись без
каталога по умолчанию, мы используем восклицательный знак:
application:
scanDirs!:
- %vendorDir%/mymodule
Сканирование каталогов можно отключить значением false. Тогда
презентеры больше не регистрируются как сервисы, поэтому их нельзя
настроить через секцию decorator, а их создание идёт
медленнее. Поэтому мы не рекомендуем полностью отключать
автоматическую регистрацию: это снизит производительность
приложения.
Шаблоны Latte
Эта настройка глобально влияет на поведение Latte в компонентах и презентерах.
latte:
# показывать панель Latte в Tracy Bar для главного шаблона (true) или для всех компонентов (all)?
debugger: ... # (true|false|'all') включено при наличии Tracy (только в режиме отладки)
# порождать шаблоны с заголовком declare(strict_types=1)
strictTypes: ... # (bool) по умолчанию false
# включить [строгий режим разбора |latte:develop#strict mode]
strictParsing: ... # (bool) по умолчанию false
# ограничивает область видимости переменных телом цикла
scopedLoopVariables: ... # (bool) по умолчанию false
# убирает отступы, возникающие из-за вложенности в парные теги
dedent: ... # (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:
extensions:
- Latte\Essential\TranslatorExtension(@Nette\Localization\Translator)
Маршрутизация
Основные настройки:
routing:
# показывать панель маршрутизации в Tracy Bar?
debugger: ... # (bool) включено при наличии Tracy (только в режиме отладки)
# сериализовать маршрутизатор в 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\IPresenterFactory | фабрика презентеров |
application.### |
Nette\Application\UI\Presenter | отдельные презентеры |
routing.router |
Nette\Routing\Router | маршрутизатор |
latte.latteFactory |
Nette\Bridges\ApplicationLatte\LatteFactory | фабрика объекта Latte\Engine |
latte.templateFactory |
Nette\Application\UI\TemplateFactory | фабрика $this->template |