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
wersja: 4.x