Nette Documentation Preview

syntax
Konfiguracija aplikacij
***********************

.[perex]
Pregled konfiguracijskih možnosti za Nette Aplikacije.


Application
===========

```neon
application:
	# prikazati ploščo "Nette Application" v Tracy BlueScreen?
	debugger: ...           # (bool) privzeto je true

	# ali se bo ob napaki klical error-presenter?
	# učinkuje samo v razvojnem načinu
	catchExceptions: ...    # (bool) privzeto je true

	# ime error-presenterja
	errorPresenter: Error   # (string|array) privzeto je 'Nette:Error'

	# definira aliase za presenterje in akcije
	aliases: ...

	# definira pravila za prevajanje imena presenterja v razred
	mapping: ...

	# ali napačne povezave ne generirajo opozoril?
	# učinkuje samo v razvojnem načinu
	silentLinks: ...        # (bool) privzeto je false
```

Od `nette/application` različice 3.2 je mogoče definirati par error-presenterjev:

```neon
application:
	errorPresenter:
		4xx: Error4xx   # za izjemo Nette\Application\BadRequestException
		5xx: Error5xx   # za ostale izjeme
```

Možnost `silentLinks` določa, kako se Nette obnaša v razvojnem načinu, ko generiranje povezave ne uspe (na primer zato, ker presenter ne obstaja itd.). Privzeta vrednost `false` pomeni, da Nette sproži napako `E_USER_WARNING`. Nastavitev na `true` bo to sporočilo o napaki potlačila. V produkcijskem okolju se `E_USER_WARNING` vedno sproži. Na to obnašanje lahko vplivamo tudi z nastavitvijo spremenljivke presenterja [$invalidLinkMode |creating-links#Neveljavne povezave].

[Aliasi poenostavljajo povezovanje |creating-links#Aliasi] na pogosto uporabljene presenterje.

[Mapiranje definira pravila |directory-structure#Mapiranje presenterjev], po katerih se iz imena presenterja izpelje ime razreda.


Samodejna registracija presenterjev
-----------------------------------

Nette samodejno dodaja presenterje kot storitve v DI vsebnik, kar bistveno pospeši njihovo ustvarjanje. Kako Nette presenterje išče, je mogoče konfigurirati:

```neon
application:
	# iskati presenterje v Composer class map?
	scanComposer: ...      # (bool) privzeto je true

	# maska, ki ji morata ustrezati ime razreda in datoteke
	scanFilter: ...        # (string) privzeto je '*Presenter'

	# v katerih mapah iskati presenterje?
	scanDirs:              # (string[]|false) privzeto je '%appDir%'
		- %vendorDir%/mymodule
```

Mape, navedene v `scanDirs`, ne prepišejo privzete vrednosti `%appDir%`, ampak jo dopolnjujejo, `scanDirs` bo torej vseboval obe poti `%appDir%` in `%vendorDir%/mymodule`. Če bi želeli privzeto mapo izpustiti, uporabimo [klicaj |dependency-injection:configuration#Združevanje], ki vrednost prepiše:

```neon
application:
	scanDirs!:
		- %vendorDir%/mymodule
```

Skeniranje map lahko izklopimo z navedbo vrednosti false. Ne priporočamo popolne potlačitve samodejnega dodajanja presenterjev, ker sicer pride do zmanjšanja zmogljivosti aplikacije.


Predloge Latte
==============

S to nastavitvijo lahko globalno vplivamo na obnašanje Latte v komponentah in presenterjih.

```neon
latte:
	# prikazati ploščo Latte v Tracy Baru za glavno predlogo (true) ali vse komponente (all)?
	debugger: ...        # (true|false|'all') privzeto je true

	# generira predloge z glavo declare(strict_types=1)
	strictTypes: ...     # (bool) privzeto je false

	# vklopi način [strogega razčlenjevalnika |latte:develop#striktní režim]
	strictParsing: ...   # (bool) privzeto je false

	# aktivira [preverjanje generirane kode |latte:develop#Kontrola vygenerovaného kódu]
	phpLinter: ...       # (string) privzeto je null

	# nastavi locale
	locale: cs_CZ        # (string) privzeto je null

	# razred objekta $this->template
	templateClass: App\MyTemplateClass # privzeto je Nette\Bridges\ApplicationLatte\DefaultTemplate
```

Če uporabljate Latte različice 3, lahko dodajate nove [razširitve |latte:extending-latte#Latte Extension] s pomočjo:

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

Če uporabljate Latte različice 2, lahko registrirate nove značke bodisi z navedbo imena razreda ali s sklicem na storitev. Kot privzeta se kliče metoda `install()`, vendar to lahko spremenite tako, da navedete ime druge metode:

```neon
latte:
	# registracija uporabniških Latte značk
	macros:
		- App\MyLatteMacros::register         # statična metoda, ime razreda ali klicna funkcija
		- @App\MyLatteMacrosFactory           # storitev z metodo install()
		- @App\MyLatteMacrosFactory::register # storitev z metodo register()

services:
	- App\MyLatteMacrosFactory
```


Usmerjanje
==========

Osnovne nastavitve:

```neon
routing:
	# prikazati usmerjevalno ploščo v Tracy Baru?
	debugger: ...   # (bool) privzeto je true

	# serializira usmerjevalnik v DI vsebnik
	cache: ...      # (bool) privzeto je false
```

Usmerjanje običajno definiramo v razredu [RouterFactory |routing#Zbirka poti]. Alternativno lahko poti definiramo tudi v konfiguraciji s pomočjo parov `maska: akcija`, vendar ta način ne ponuja tako široke variabilnosti v nastavitvah:

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


Konstante
=========

Ustvarjanje PHP konstant.

```neon
constants:
	Foobar: 'baz'
```

Po zagonu aplikacije bo ustvarjena konstanta `Foobar`.

.[note]
Konstante ne bi smele služiti kot nekakšne globalno dostopne spremenljivke. Za posredovanje vrednosti v objekte uporabite [dependency injection |dependency-injection:passing-dependencies].


PHP
===

Nastavitev direktiv PHP. Pregled vseh direktiv najdete na [php.net |https://www.php.net/manual/en/ini.list.php].

```neon
php:
	date.timezone: Europe/Prague
```


Storitve DI
===========

Te storitve se dodajajo v DI vsebnik:

| Ime             | Tip                        | Opis
|----------------------------------------------------------
| `application.application`	     | [api:Nette\Application\Application]      |  [zaganjalnik celotne aplikacije |how-it-works#Nette Application]
| `application.linkGenerator`    | [api:Nette\Application\LinkGenerator]    |  [LinkGenerator |creating-links#LinkGenerator]
| `application.presenterFactory` | [api:Nette\Application\PresenterFactory] |  tovarna za presenterje
| `application.###`              | [api:Nette\Application\UI\Presenter]     |  posamezni presenterji
| `latte.latteFactory`           | [api:Nette\Bridges\ApplicationLatte\LatteFactory] | tovarna objekta `Latte\Engine`
| `latte.templateFactory`        | [api:Nette\Application\UI\TemplateFactory] | tovarna za [`$this->template` |templates]

Konfiguracija aplikacij

Pregled konfiguracijskih možnosti za Nette Aplikacije.

Application

application:
	# prikazati ploščo "Nette Application" v Tracy BlueScreen?
	debugger: ...           # (bool) privzeto je true

	# ali se bo ob napaki klical error-presenter?
	# učinkuje samo v razvojnem načinu
	catchExceptions: ...    # (bool) privzeto je true

	# ime error-presenterja
	errorPresenter: Error   # (string|array) privzeto je 'Nette:Error'

	# definira aliase za presenterje in akcije
	aliases: ...

	# definira pravila za prevajanje imena presenterja v razred
	mapping: ...

	# ali napačne povezave ne generirajo opozoril?
	# učinkuje samo v razvojnem načinu
	silentLinks: ...        # (bool) privzeto je false

Od nette/application različice 3.2 je mogoče definirati par error-presenterjev:

application:
	errorPresenter:
		4xx: Error4xx   # za izjemo Nette\Application\BadRequestException
		5xx: Error5xx   # za ostale izjeme

Možnost silentLinks določa, kako se Nette obnaša v razvojnem načinu, ko generiranje povezave ne uspe (na primer zato, ker presenter ne obstaja itd.). Privzeta vrednost false pomeni, da Nette sproži napako E_USER_WARNING. Nastavitev na true bo to sporočilo o napaki potlačila. V produkcijskem okolju se E_USER_WARNING vedno sproži. Na to obnašanje lahko vplivamo tudi z nastavitvijo spremenljivke presenterja $invalidLinkMode.

Aliasi poenostavljajo povezovanje na pogosto uporabljene presenterje.

Mapiranje definira pravila, po katerih se iz imena presenterja izpelje ime razreda.

Samodejna registracija presenterjev

Nette samodejno dodaja presenterje kot storitve v DI vsebnik, kar bistveno pospeši njihovo ustvarjanje. Kako Nette presenterje išče, je mogoče konfigurirati:

application:
	# iskati presenterje v Composer class map?
	scanComposer: ...      # (bool) privzeto je true

	# maska, ki ji morata ustrezati ime razreda in datoteke
	scanFilter: ...        # (string) privzeto je '*Presenter'

	# v katerih mapah iskati presenterje?
	scanDirs:              # (string[]|false) privzeto je '%appDir%'
		- %vendorDir%/mymodule

Mape, navedene v scanDirs, ne prepišejo privzete vrednosti %appDir%, ampak jo dopolnjujejo, scanDirs bo torej vseboval obe poti %appDir% in %vendorDir%/mymodule. Če bi želeli privzeto mapo izpustiti, uporabimo klicaj, ki vrednost prepiše:

application:
	scanDirs!:
		- %vendorDir%/mymodule

Skeniranje map lahko izklopimo z navedbo vrednosti false. Ne priporočamo popolne potlačitve samodejnega dodajanja presenterjev, ker sicer pride do zmanjšanja zmogljivosti aplikacije.

Predloge Latte

S to nastavitvijo lahko globalno vplivamo na obnašanje Latte v komponentah in presenterjih.

latte:
	# prikazati ploščo Latte v Tracy Baru za glavno predlogo (true) ali vse komponente (all)?
	debugger: ...        # (true|false|'all') privzeto je true

	# generira predloge z glavo declare(strict_types=1)
	strictTypes: ...     # (bool) privzeto je false

	# vklopi način [strogega razčlenjevalnika |latte:develop#striktní režim]
	strictParsing: ...   # (bool) privzeto je false

	# aktivira [preverjanje generirane kode |latte:develop#Kontrola vygenerovaného kódu]
	phpLinter: ...       # (string) privzeto je null

	# nastavi locale
	locale: cs_CZ        # (string) privzeto je null

	# razred objekta $this->template
	templateClass: App\MyTemplateClass # privzeto je Nette\Bridges\ApplicationLatte\DefaultTemplate

Če uporabljate Latte različice 3, lahko dodajate nove razširitve s pomočjo:

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

Če uporabljate Latte različice 2, lahko registrirate nove značke bodisi z navedbo imena razreda ali s sklicem na storitev. Kot privzeta se kliče metoda install(), vendar to lahko spremenite tako, da navedete ime druge metode:

latte:
	# registracija uporabniških Latte značk
	macros:
		- App\MyLatteMacros::register         # statična metoda, ime razreda ali klicna funkcija
		- @App\MyLatteMacrosFactory           # storitev z metodo install()
		- @App\MyLatteMacrosFactory::register # storitev z metodo register()

services:
	- App\MyLatteMacrosFactory

Usmerjanje

Osnovne nastavitve:

routing:
	# prikazati usmerjevalno ploščo v Tracy Baru?
	debugger: ...   # (bool) privzeto je true

	# serializira usmerjevalnik v DI vsebnik
	cache: ...      # (bool) privzeto je false

Usmerjanje običajno definiramo v razredu RouterFactory. Alternativno lahko poti definiramo tudi v konfiguraciji s pomočjo parov maska: akcija, vendar ta način ne ponuja tako široke variabilnosti v nastavitvah:

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

Konstante

Ustvarjanje PHP konstant.

constants:
	Foobar: 'baz'

Po zagonu aplikacije bo ustvarjena konstanta Foobar.

Konstante ne bi smele služiti kot nekakšne globalno dostopne spremenljivke. Za posredovanje vrednosti v objekte uporabite dependency injection.

PHP

Nastavitev direktiv PHP. Pregled vseh direktiv najdete na php.net.

php:
	date.timezone: Europe/Prague

Storitve DI

Te storitve se dodajajo v DI vsebnik:

Ime Tip Opis
application.application Nette\Application\Application zaganjalnik celotne aplikacije
application.linkGenerator Nette\Application\LinkGenerator LinkGenerator
application.presenterFactory Nette\Application\PresenterFactory tovarna za presenterje
application.### Nette\Application\UI\Presenter posamezni presenterji
latte.latteFactory Nette\Bridges\ApplicationLatte\LatteFactory tovarna objekta Latte\Engine
latte.templateFactory Nette\Application\UI\TemplateFactory tovarna za $this->template