Nette Documentation Preview

syntax
Konfigurace aplikací
********************

.[perex]
Přehled konfiguračních voleb pro Nette Aplikace.


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

```neon
application:
	# zobrazit "Nette Application" panel v Tracy BlueScreen?
	debugger: ...           # (bool) výchozí je true

	# bude se při chybě volat error-presenter?
	# má efekt pouze ve vývojářském režimu
	catchExceptions: ...    # (bool) výchozí je true

	# název error-presenteru
	errorPresenter: Error   # (string|array) výchozí je 'Nette:Error'

	# definuje aliasy pro presentery a akce
	aliases: ...

	# definuje pravidla pro překlad názvu presenteru na třídu
	mapping: ...

	# chybné odkazy negenerují varování?
	# má efekt pouze ve vývojářském režimu
	silentLinks: ...        # (bool) výchozí je false
```

Od `nette/application` verze 3.2 lze definovat dvojici error-presenterů:

```neon
application:
	errorPresenter:
		4xx: Error4xx   # pro výjimku Nette\Application\BadRequestException
		5xx: Error5xx   # pro ostatní výjimky
```

Volba `silentLinks` určuje, jak se Nette zachová ve vývojářském režimu, když selže generování odkazu (třeba proto, že neexistuje presenter, atd). Výchozí hodnota `false` znamená, že Nette vyhodí `E_USER_WARNING` chybu. Nastavením na `true` dojde k potlačení této chybové hlášky. V produkčním prostředí se `E_USER_WARNING` vyvolá vždy. Toto chování můžeme také ovlivnit nastavením proměnné presenteru [$invalidLinkMode|creating-links#neplatne-odkazy].

[Aliasy zjednodušují odkazování |creating-links#aliasy] na často používané presentery.

[Mapování definuje pravidla |modules#mapování], podle kterých se z názvu presenteru odvodí název třídy.


Automatická registrace presenterů
---------------------------------

Nette automaticky přidává presentery jako služby do DI kontejneru, což zásadně zrychlí jejich vytváření. Jak Nette presentery dohledává lze konfigurovat:

```neon
application:
	# hledat presentery v Composer class map?
	scanComposer: ...      # (bool) výchozí je true

	# maska, které musí vyhovovat název třídy a souboru
	scanFilter: ...        # (string) výchozí je '*Presenter'

	# ve kterých adresářích hledat presentery?
	scanDirs:              # (string[]|false) výchozí je '%appDir%'
		- %vendorDir%/mymodule
```

Adresáře uvedené v `scanDirs` nepřepisují výchozí hodnotu `%appDir%`, ale doplňují ji, `scanDirs` tedy bude obsahovat obě cesty `%appDir%` a `%vendorDir%/mymodule`. Pokud bychom chtěli výchozí adresář vynechat, použijeme [vykřičník |dependency-injection:configuration#Slučování], který hodnotu přepíše:

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

Skenování adresářů lze vypnout uvedením hodnoty false. Nedoporučujeme úplně potlačit automatické přidávání presenterů, protože jinak dojde ke snížení výkonu aplikace.


Šablony Latte
=============

Tímto nastavením lze globálně ovlivnit chování Latte v komponentách a presenterech.

```neon
latte:
	# zobrazit Latte panel v Tracy Baru pro hlavní šablonu (true) nebo všechny komponenty (all)?
	debugger: ...        # (true|false|'all') výchozí je true

	# generuje šablony s hlavičkou declare(strict_types=1)
	strictTypes: ...     # (bool) výchozí je false

	# zapne režim [striktního parseru |latte:develop#striktní režim]
	strictParsing: ...   # (bool) výchozí je false

	# aktivuje [kontrolu vygenerovaného kódu |latte:develop#Kontrola vygenerovaného kódu]
	phpLinter: ...       # (string) výchozí je null

	# třída objektu $this->template
	templateClass: App\MyTemplateClass # výchozí je Nette\Bridges\ApplicationLatte\DefaultTemplate
```

Pokud používáte Latte verze 3, můžete přidávat nové [rozšíření |latte:creating-extension] pomocí:

```neon
latte:
	extensions:
		- Latte\Essential\TranslatorExtension
```

Pokud používáte Latte verze 2, můžete registrovat nové tagy (makra) buď uvedením jména třídy, nebo referencí na službu. Jako výchozí je zavolána metoda `install()`, ale to lze změnit tím, že uvedeme jméno jiné metody:

```neon
latte:
	# registrace uživatelských Latte značek
	macros:
		- App\MyLatteMacros::register         # statická metoda, classname nebo callable
		- @App\MyLatteMacrosFactory           # služba s metodou install()
		- @App\MyLatteMacrosFactory::register # služba s metodou register()

services:
	- App\MyLatteMacrosFactory
```


Routování
=========

Základní nastavení:

```neon
routing:
	# zobrazit routovací panel v Tracy Bar?
	debugger: ...   # (bool) výchozí je true

	# serializuje router do DI kontejneru
	cache: ...      # (bool) výchozí je false
```

Routování obvykle definujeme ve třídě [RouterFactory |routing#Kolekce rout]. Alternativně lze routy definovat také v konfiguraci pomocí dvojic `maska: akce`, ale tento způsob nenabízí tak širokou variabilitu v nastavení:

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


Konstanty
=========

Vytváření PHP konstant.

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

Po nastartování aplikace bude vytvořena konstanta `Foobar`.

.[note]
Konstanty by neměly sloužit jako jakési globálně dostupné proměnné. Pro předávání hodnot do objektů využijte [dependency injection |dependency-injection:passing-dependencies].


PHP
===

Nastavení direktiv PHP. Přehled všech direktiv naleznete na [php.net |https://www.php.net/manual/en/ini.list.php].

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


Služby DI
=========

Tyto služby se přidávají do DI kontejneru:

| Název           | Typ                        | Popis
|----------------------------------------------------------
| `application.application`	     | [api:Nette\Application\Application]      |  [spouštěč celé aplikace |how-it-works#Nette Application]
| `application.linkGenerator`    | [api:Nette\Application\LinkGenerator]    |  [LinkGenerator |creating-links#LinkGenerator]
| `application.presenterFactory` | [api:Nette\Application\PresenterFactory] |  továrna na presentery
| `application.###`              | [api:Nette\Application\UI\Presenter]     |  jednotlivé presentery
| `latte.latteFactory`           | [api:Nette\Bridges\ApplicationLatte\LatteFactory] | továrna objektu `Latte\Engine`
| `latte.templateFactory`        | [api:Nette\Application\UI\TemplateFactory] | továrna pro [`$this->template` |templates]

Konfigurace aplikací

Přehled konfiguračních voleb pro Nette Aplikace.

Application

application:
	# zobrazit "Nette Application" panel v Tracy BlueScreen?
	debugger: ...           # (bool) výchozí je true

	# bude se při chybě volat error-presenter?
	# má efekt pouze ve vývojářském režimu
	catchExceptions: ...    # (bool) výchozí je true

	# název error-presenteru
	errorPresenter: Error   # (string|array) výchozí je 'Nette:Error'

	# definuje aliasy pro presentery a akce
	aliases: ...

	# definuje pravidla pro překlad názvu presenteru na třídu
	mapping: ...

	# chybné odkazy negenerují varování?
	# má efekt pouze ve vývojářském režimu
	silentLinks: ...        # (bool) výchozí je false

Od nette/application verze 3.2 lze definovat dvojici error-presenterů:

application:
	errorPresenter:
		4xx: Error4xx   # pro výjimku Nette\Application\BadRequestException
		5xx: Error5xx   # pro ostatní výjimky

Volba silentLinks určuje, jak se Nette zachová ve vývojářském režimu, když selže generování odkazu (třeba proto, že neexistuje presenter, atd). Výchozí hodnota false znamená, že Nette vyhodí E_USER_WARNING chybu. Nastavením na true dojde k potlačení této chybové hlášky. V produkčním prostředí se E_USER_WARNING vyvolá vždy. Toto chování můžeme také ovlivnit nastavením proměnné presenteru $invalidLinkMode.

Aliasy zjednodušují odkazování na často používané presentery.

Mapování definuje pravidla, podle kterých se z názvu presenteru odvodí název třídy.

Automatická registrace presenterů

Nette automaticky přidává presentery jako služby do DI kontejneru, což zásadně zrychlí jejich vytváření. Jak Nette presentery dohledává lze konfigurovat:

application:
	# hledat presentery v Composer class map?
	scanComposer: ...      # (bool) výchozí je true

	# maska, které musí vyhovovat název třídy a souboru
	scanFilter: ...        # (string) výchozí je '*Presenter'

	# ve kterých adresářích hledat presentery?
	scanDirs:              # (string[]|false) výchozí je '%appDir%'
		- %vendorDir%/mymodule

Adresáře uvedené v scanDirs nepřepisují výchozí hodnotu %appDir%, ale doplňují ji, scanDirs tedy bude obsahovat obě cesty %appDir% a %vendorDir%/mymodule. Pokud bychom chtěli výchozí adresář vynechat, použijeme vykřičník, který hodnotu přepíše:

application:
	scanDirs!:
		- %vendorDir%/mymodule

Skenování adresářů lze vypnout uvedením hodnoty false. Nedoporučujeme úplně potlačit automatické přidávání presenterů, protože jinak dojde ke snížení výkonu aplikace.

Šablony Latte

Tímto nastavením lze globálně ovlivnit chování Latte v komponentách a presenterech.

latte:
	# zobrazit Latte panel v Tracy Baru pro hlavní šablonu (true) nebo všechny komponenty (all)?
	debugger: ...        # (true|false|'all') výchozí je true

	# generuje šablony s hlavičkou declare(strict_types=1)
	strictTypes: ...     # (bool) výchozí je false

	# zapne režim [striktního parseru |latte:develop#striktní režim]
	strictParsing: ...   # (bool) výchozí je false

	# aktivuje [kontrolu vygenerovaného kódu |latte:develop#Kontrola vygenerovaného kódu]
	phpLinter: ...       # (string) výchozí je null

	# třída objektu $this->template
	templateClass: App\MyTemplateClass # výchozí je Nette\Bridges\ApplicationLatte\DefaultTemplate

Pokud používáte Latte verze 3, můžete přidávat nové rozšíření pomocí:

latte:
	extensions:
		- Latte\Essential\TranslatorExtension

Pokud používáte Latte verze 2, můžete registrovat nové tagy (makra) buď uvedením jména třídy, nebo referencí na službu. Jako výchozí je zavolána metoda install(), ale to lze změnit tím, že uvedeme jméno jiné metody:

latte:
	# registrace uživatelských Latte značek
	macros:
		- App\MyLatteMacros::register         # statická metoda, classname nebo callable
		- @App\MyLatteMacrosFactory           # služba s metodou install()
		- @App\MyLatteMacrosFactory::register # služba s metodou register()

services:
	- App\MyLatteMacrosFactory

Routování

Základní nastavení:

routing:
	# zobrazit routovací panel v Tracy Bar?
	debugger: ...   # (bool) výchozí je true

	# serializuje router do DI kontejneru
	cache: ...      # (bool) výchozí je false

Routování obvykle definujeme ve třídě RouterFactory. Alternativně lze routy definovat také v konfiguraci pomocí dvojic maska: akce, ale tento způsob nenabízí tak širokou variabilitu v nastavení:

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

Konstanty

Vytváření PHP konstant.

constants:
	Foobar: 'baz'

Po nastartování aplikace bude vytvořena konstanta Foobar.

Konstanty by neměly sloužit jako jakési globálně dostupné proměnné. Pro předávání hodnot do objektů využijte dependency injection.

PHP

Nastavení direktiv PHP. Přehled všech direktiv naleznete na php.net.

php:
	date.timezone: Europe/Prague

Služby DI

Tyto služby se přidávají do DI kontejneru:

Název Typ Popis
application.application Nette\Application\Application spouštěč celé aplikace
application.linkGenerator Nette\Application\LinkGenerator LinkGenerator
application.presenterFactory Nette\Application\PresenterFactory továrna na presentery
application.### Nette\Application\UI\Presenter jednotlivé presentery
latte.latteFactory Nette\Bridges\ApplicationLatte\LatteFactory továrna objektu Latte\Engine
latte.templateFactory Nette\Application\UI\TemplateFactory továrna pro $this->template