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