Konfiguracja aplikacji
Przegląd opcji konfiguracyjnych Nette Application.
Application
application:
# pokazywać panel "Nette Application" w Tracy BlueScreen?
debugger: ... # (bool) włączone, jeśli Tracy jest dostępne
# na produkcji wyjątki zawsze obsługuje error-presenter;
# ta opcja włącza to zachowanie również w trybie deweloperskim
catchExceptions: ... # (bool) domyślnie false - czyli wyłączone w dev, na produkcji zawsze włączone
# nazwa error-presentera
errorPresenter: Error # (string|array) domyślnie 'Nette:Error'
# definiuje aliasy presenterów i akcji
aliases: ...
# definiuje reguły tłumaczenia nazwy presentera na klasę
mapping: ...
# wyciszać ostrzeżenia o nieprawidłowych odnośnikach?
# działa tylko w trybie deweloperskim
silentLinks: ... # (bool) domyślnie false
Od wersji 3.2 pakietu nette/application można zdefiniować parę error-presenterów:
application:
errorPresenter:
4xx: Error4xx # dla Nette\Application\BadRequestException
5xx: Error5xx # dla pozostałych wyjątków
Rozdzielenie ich przydaje się, bo obie sytuacje są zasadniczo różne. BadRequestException (kody 4xx) oznacza,
że z aplikacją wszystko w porządku, a jedynie odwiedzający poprosił o coś, co nie istnieje. Możesz więc użyć
pełnoprawnego presentera, który wyświetli przyjazny komunikat w layoucie Twojej witryny. Odwrotnie, błąd 5xx oznacza, że w
aplikacji coś się zepsuło i nie wiadomo co. Presenter dla 5xx trzymaj możliwie minimalny, aby przy jego renderowaniu nie
mogło zawieść nic więcej – najlepiej, aby nie dotykał bazy danych, layoutu ani zalogowanego użytkownika.
Opcja silentLinks określa, jak Nette zachowuje się w trybie deweloperskim, gdy generowanie odnośnika się nie
powiedzie (na przykład dlatego, że presenter nie istnieje itd.). Wartość domyślna false oznacza, że Nette
zgłasza błąd E_USER_WARNING. Ustawienie na true wycisza ten komunikat. W środowisku produkcyjnym
E_USER_WARNING zgłaszany jest zawsze. Na to zachowanie można wpłynąć również ustawieniem zmiennej presentera
$invalidLinkMode.
Aliasy upraszczają odwoływanie się do często używanych presenterów.
Mapowanie definiuje reguły, według których z nazwy presentera wyprowadzana jest nazwa klasy.
Automatyczna rejestracja presenterów
Nette automatycznie dodaje presentery jako usługi do kontenera DI, co znacząco przyspiesza ich tworzenie. To, jak Nette odnajduje presentery, można skonfigurować:
application:
# szukać presenterów w class mapie Composera?
scanComposer: ... # (bool) domyślnie true
# maska, do której musi pasować nazwa klasy i pliku
scanFilter: ... # (string) domyślnie '*Presenter'
# w których katalogach szukać presenterów?
scanDirs: # (string[]|false) domyślnie '%appDir%'
- %vendorDir%/mymodule
Katalogi wymienione w scanDirs nie nadpisują wartości domyślnej %appDir%, lecz ją uzupełniają,
więc scanDirs będzie zawierać obie ścieżki: %appDir% i %vendorDir%/mymodule. Jeśli
chcemy pominąć katalog domyślny, użyjemy wykrzyknika:
application:
scanDirs!:
- %vendorDir%/mymodule
Skanowanie katalogów można wyłączyć, ustawiając wartość na false. Presentery nie są wtedy rejestrowane
jako usługi, więc nie da się ich dostosować przez sekcję decorator, a ich tworzenie jest wolniejsze.
Nie zalecamy więc całkowitego wyłączania automatycznej rejestracji, bo obniży to wydajność aplikacji.
Szablony Latte
To ustawienie globalnie wpływa na zachowanie Latte w komponentach i presenterach.
latte:
# pokazywać panel Latte w pasku Tracy dla głównego szablonu (true), czy dla wszystkich komponentów (all)?
debugger: ... # (true|false|'all') włączone, jeśli Tracy jest dostępne (tylko w trybie debug)
# generować szablony z nagłówkiem declare(strict_types=1)
strictTypes: ... # (bool) domyślnie false
# włącza [tryb ścisłego parsera |latte:develop#strict mode]
strictParsing: ... # (bool) domyślnie false
# ogranicza zasięg zmiennych do ciała pętli
scopedLoopVariables: ... # (bool) domyślnie false
# usuwa wcięcia powstałe z zagnieżdżenia w tagach parzystych
dedent: ... # (bool) domyślnie false
# włącza [kontrolę wygenerowanego kodu |latte:develop#Checking Generated Code]
phpLinter: ... # (string) domyślnie null
# ustawia locale
locale: cs_CZ # (string) domyślnie null
# klasa obiektu $this->template
templateClass: App\MyTemplateClass # domyślnie Nette\Bridges\ApplicationLatte\DefaultTemplate
Nowe rozszerzenia dodasz tak:
latte:
extensions:
- Latte\Essential\TranslatorExtension(@Nette\Localization\Translator)
Routing
Podstawowe ustawienia:
routing:
# pokazywać panel routingu w pasku Tracy?
debugger: ... # (bool) włączone, jeśli Tracy jest dostępne (tylko w trybie debug)
# serializować router do kontenera DI
cache: ... # (bool) domyślnie false
Routing definiuje się zwykle w klasie RouterFactory. Alternatywnie trasy można definiować
również w konfiguracji za pomocą par maska: akcja, ale ten sposób nie daje zbyt dużej elastyczności:
routing:
routes:
'detail/<id>': Admin:Home:default
'<presenter>/<action>': Front:Home:default
Stałe
Tworzenie stałych PHP.
constants:
Foobar: 'baz'
Stała Foobar zostanie utworzona po starcie aplikacji.
Stałe nie powinny służyć jako globalnie dostępne zmienne. Do przekazywania wartości do obiektów używaj wstrzykiwania zależności.
PHP
Ustawianie dyrektyw PHP. Przegląd wszystkich dyrektyw znajdziesz na php.net.
php:
date.timezone: Europe/Prague
Usługi DI
Do kontenera DI dodawane są te usługi:
| Nazwa | Typ | Opis |
|---|---|---|
application.application |
Nette\Application\Application | uruchamiacz aplikacji |
application.linkGenerator |
Nette\Application\LinkGenerator | LinkGenerator |
application.presenterFactory |
Nette\Application\IPresenterFactory | fabryka presenterów |
application.### |
Nette\Application\UI\Presenter | poszczególne presentery |
routing.router |
Nette\Routing\Router | router |
latte.latteFactory |
Nette\Bridges\ApplicationLatte\LatteFactory | fabryka obiektu Latte\Engine |
latte.templateFactory |
Nette\Application\UI\TemplateFactory | fabryka $this->template |