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