Configurația aplicațiilor

Prezentare generală a opțiunilor de configurare pentru aplicațiile Nette.

Application

application:
	# afișează panoul "Nette Application" în Tracy BlueScreen?
	debugger: ...           # (bool) implicit este true

	# se va apela error-presenter în caz de eroare?
	# are efect doar în modul de dezvoltare
	catchExceptions: ...    # (bool) implicit este true

	# numele error-presenterului
	errorPresenter: Error   # (string|array) implicit este 'Nette:Error'

	# definește aliasuri pentru presentere și acțiuni
	aliases: ...

	# definește reguli pentru traducerea numelui presenterului în clasă
	mapping: ...

	# linkurile invalide nu generează avertismente?
	# are efect doar în modul de dezvoltare
	silentLinks: ...        # (bool) implicit este false

De la versiunea nette/application 3.2 se poate defini o pereche de error-presentere:

application:
	errorPresenter:
		4xx: Error4xx   # pentru excepția Nette\Application\BadRequestException
		5xx: Error5xx   # pentru celelalte excepții

Opțiunea silentLinks determină cum se comportă Nette în modul de dezvoltare când generarea unui link eșuează (de exemplu, pentru că nu există presenterul etc.). Valoarea implicită false înseamnă că Nette va arunca o eroare E_USER_WARNING. Setarea la true va suprima acest mesaj de eroare. În mediul de producție, E_USER_WARNING este întotdeauna aruncat. Acest comportament poate fi, de asemenea, influențat prin setarea variabilei presenterului $invalidLinkMode.

Aliasurile simplifică legarea la presenterele utilizate frecvent.

Maparea definește reguli, conform cărora din numele presenterului se deduce numele clasei.

Înregistrarea automată a presenterelor

Nette adaugă automat presenterele ca servicii în containerul DI, ceea ce accelerează semnificativ crearea lor. Modul în care Nette localizează presenterele poate fi configurat:

application:
	# caută presentere în Composer class map?
	scanComposer: ...      # (bool) implicit este true

	# masca pe care trebuie să o respecte numele clasei și al fișierului
	scanFilter: ...        # (string) implicit este '*Presenter'

	# în ce directoare să caute presentere?
	scanDirs:              # (string[]|false) implicit este '%appDir%'
		- %vendorDir%/mymodule

Directoarele specificate în scanDirs nu suprascriu valoarea implicită %appDir%, ci o completează, deci scanDirs va conține ambele căi %appDir% și %vendorDir%/mymodule. Dacă dorim să omitem directorul implicit, folosim semnul exclamării, care suprascrie valoarea:

application:
	scanDirs!:
		- %vendorDir%/mymodule

Scanarea directoarelor poate fi dezactivată specificând valoarea false. Nu recomandăm suprimarea completă a adăugării automate a presenterelor, deoarece altfel performanța aplicației va scădea.

Șabloane Latte

Prin această setare se poate influența global comportamentul Latte în componente și presentere.

latte:
	# afișează panoul Latte în Tracy Bar pentru șablonul principal (true) sau toate componentele (all)?
	debugger: ...        # (true|false|'all') implicit este true

	# generează șabloane cu antetul declare(strict_types=1)
	strictTypes: ...     # (bool) implicit este false

	# activează modul [parser strict |latte:develop#striktní režim]
	strictParsing: ...   # (bool) implicit este false

	# activează [verificarea codului generat |latte:develop#Kontrola vygenerovaného kódu]
	phpLinter: ...       # (string) implicit este null

	# setează locale
	locale: cs_CZ        # (string) implicit este null

	# clasa obiectului $this->template
	templateClass: App\MyTemplateClass # implicit este Nette\Bridges\ApplicationLatte\DefaultTemplate

Dacă utilizați Latte versiunea 3, puteți adăuga noi extensii folosind:

latte:
	extensions:
		- Latte\Essential\TranslatorExtension(@Nette\Localization\Translator)

Dacă utilizați Latte versiunea 2, puteți înregistra noi tag-uri fie specificând numele clasei, fie o referință la serviciu. Implicit, se apelează metoda install(), dar acest lucru poate fi schimbat specificând numele altei metode:

latte:
	# înregistrarea tag-urilor Latte personalizate
	macros:
		- App\MyLatteMacros::register         # metodă statică, classname sau callable
		- @App\MyLatteMacrosFactory           # serviciu cu metoda install()
		- @App\MyLatteMacrosFactory::register # serviciu cu metoda register()

services:
	- App\MyLatteMacrosFactory

Rutare

Setări de bază:

routing:
	# afișează panoul de rutare în Tracy Bar?
	debugger: ...   # (bool) implicit este true

	# serializează routerul în containerul DI
	cache: ...      # (bool) implicit este false

Rutarea o definim de obicei în clasa RouterFactory. Alternativ, rutele pot fi definite și în configurație folosind perechi mască: acțiune, dar această metodă nu oferă o varietate atât de largă în setări:

routing:
	routes:
		'detail/<id>': Admin:Home:default
		'<presenter>/<action>': Front:Home:default

Constante

Crearea constantelor PHP.

constants:
	Foobar: 'baz'

După pornirea aplicației, va fi creată constanta Foobar.

Constantele nu ar trebui să servească drept variabile disponibile global. Pentru transmiterea valorilor către obiecte, utilizați dependency injection.

PHP

Setarea directivelor PHP. O prezentare generală a tuturor directivelor o găsiți pe php.net.

php:
	date.timezone: Europe/Prague

Servicii DI

Aceste servicii sunt adăugate în containerul DI:

Nume Tip Descriere
application.application Nette\Application\Application lansatorul întregii aplicații
application.linkGenerator Nette\Application\LinkGenerator LinkGenerator
application.presenterFactory Nette\Application\PresenterFactory fabrică de presentere
application.### Nette\Application\UI\Presenter presentere individuale
latte.latteFactory Nette\Bridges\ApplicationLatte\LatteFactory fabrică a obiectului Latte\Engine
latte.templateFactory Nette\Application\UI\TemplateFactory fabrică pentru $this->template
versiune: 4.0