Nette Documentation Preview

syntax
Konfiguracja aplikacji
**********************

.[perex]
Przegląd opcji konfiguracyjnych dla aplikacji Nette.


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

```neon
application:
	# wyświetlić panel "Nette Application" w Tracy BlueScreen?
	debugger: ...           # (bool) domyślnie true

	# czy przy błędzie będzie wywoływany error-presenter?
	# ma efekt tylko w trybie deweloperskim
	catchExceptions: ...    # (bool) domyślnie true

	# nazwa error-presentera
	errorPresenter: Error   # (string|array) domyślnie 'Nette:Error'

	# definiuje aliasy dla presenterów i akcji
	aliases: ...

	# definiuje reguły tłumaczenia nazwy presentera na klasę
	mapping: ...

	# nieprawidłowe linki nie generują ostrzeżeń?
	# ma efekt tylko w trybie deweloperskim
	silentLinks: ...        # (bool) domyślnie false
```

Od wersji `nette/application` 3.2 można zdefiniować parę error-presenterów:

```neon
application:
	errorPresenter:
		4xx: Error4xx   # dla wyjątku Nette\Application\BadRequestException
		5xx: Error5xx   # dla pozostałych wyjątków
```

Opcja `silentLinks` określa, jak Nette zachowa się w trybie deweloperskim, gdy generowanie linku nie powiodło się (np. dlatego, że presenter nie istnieje itp.). Domyślna wartość `false` oznacza, że Nette zgłosi błąd `E_USER_WARNING`. Ustawienie na `true` spowoduje stłumienie tego komunikatu błędu. W środowisku produkcyjnym `E_USER_WARNING` jest zawsze zgłaszany. To zachowanie możemy również kontrolować, ustawiając zmienną presentera [$invalidLinkMode |creating-links#Nieprawidłowe linki].

[Aliasy upraszczają linkowanie |creating-links#Aliasy] do często używanych presenterów.

[Mapowanie definiuje reguły |directory-structure#Mapowanie presenterów], 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. Sposób, w jaki Nette wyszukuje presentery, można skonfigurować:

```neon
application:
	# szukać presenterów w Composer class map?
	scanComposer: ...      # (bool) domyślnie true

	# maska, której musi odpowiadać 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 podane w `scanDirs` nie nadpisują wartości domyślnej `%appDir%`, ale uzupełniają ją, więc `scanDirs` będzie zawierać obie ścieżki `%appDir%` i `%vendorDir%/mymodule`. Jeśli chcielibyśmy pominąć katalog domyślny, użyjemy [wykrzyknika |dependency-injection:configuration#Łączenie], który nadpisze wartość:

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

Skanowanie katalogów można wyłączyć, podając wartość `false`. Nie zalecamy całkowitego wyłączania automatycznego dodawania presenterów, ponieważ w przeciwnym razie dojdzie do obniżenia wydajności aplikacji.


Szablony Latte
==============

Tym ustawieniem można globalnie wpłynąć na zachowanie Latte w komponentach i presenterach.

```neon
latte:
	# wyświetlić panel Latte w Tracy Bar dla głównego szablonu (true) lub wszystkich komponentów (all)?
	debugger: ...        # (true|false|'all') domyślnie true

	# generuje szablony z nagłówkiem declare(strict_types=1)
	strictTypes: ...     # (bool) domyślnie false

	# włącza tryb [ścisłego parsera |latte:develop#striktní režim]
	strictParsing: ...   # (bool) domyślnie false

	# aktywuje [kontrolę wygenerowanego kodu |latte:develop#Kontrola vygenerovaného kódu]
	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
```

Jeśli używasz Latte w wersji 3, możesz dodawać nowe [rozszerzenia |latte:extending-latte#Latte Extension] za pomocą:

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

Jeśli używasz Latte w wersji 2, możesz rejestrować nowe tagi, podając nazwę klasy lub referencję do usługi. Domyślnie wywoływana jest metoda `install()`, ale można to zmienić, podając nazwę innej metody:

```neon
latte:
	# rejestracja niestandardowych znaczników Latte
	macros:
		- App\MyLatteMacros::register         # metoda statyczna, nazwa klasy lub callable
		- @App\MyLatteMacrosFactory           # usługa z metodą install()
		- @App\MyLatteMacrosFactory::register # usługa z metodą register()

services:
	- App\MyLatteMacrosFactory
```


Routing
=======

Podstawowe ustawienia:

```neon
routing:
	# wyświetlić panel routingu w Tracy Bar?
	debugger: ...   # (bool) domyślnie true

	# serializuje router do kontenera DI
	cache: ...      # (bool) domyślnie false
```

Routing zazwyczaj definiujemy w klasie [RouterFactory |routing#Kolekcja tras]. Alternatywnie trasy można definiować również w konfiguracji za pomocą par `maska: akcja`, ale ten sposób nie oferuje tak szerokiej zmienności w ustawieniach:

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


Stałe
=====

Tworzenie stałych PHP.

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

Po uruchomieniu aplikacji zostanie utworzona stała `Foobar`.

.[note]
Stałe nie powinny służyć jako swego rodzaju globalnie dostępne zmienne. Do przekazywania wartości do obiektów wykorzystaj [dependency injection |dependency-injection:passing-dependencies].


PHP
===

Ustawienia dyrektyw PHP. Przegląd wszystkich dyrektyw znajdziesz na [php.net |https://www.php.net/manual/en/ini.list.php].

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


Usługi DI
=========

Te usługi są dodawane do kontenera DI:

| Nazwa           | Typ                        | Opis
|----------------------------------------------------------
| `application.application`	     | [api:Nette\Application\Application]      |  [uruchamiacz całej aplikacji |how-it-works#Nette Application]
| `application.linkGenerator`    | [api:Nette\Application\LinkGenerator]    |  [LinkGenerator |creating-links#LinkGenerator]
| `application.presenterFactory` | [api:Nette\Application\PresenterFactory] |  fabryka presenterów
| `application.###`              | [api:Nette\Application\UI\Presenter]     |  poszczególne presentery
| `latte.latteFactory`           | [api:Nette\Bridges\ApplicationLatte\LatteFactory] | fabryka obiektu `Latte\Engine`
| `latte.templateFactory`        | [api:Nette\Application\UI\TemplateFactory] | fabryka dla [`$this->template` |templates]

Konfiguracja aplikacji

Przegląd opcji konfiguracyjnych dla aplikacji Nette.

Application

application:
	# wyświetlić panel "Nette Application" w Tracy BlueScreen?
	debugger: ...           # (bool) domyślnie true

	# czy przy błędzie będzie wywoływany error-presenter?
	# ma efekt tylko w trybie deweloperskim
	catchExceptions: ...    # (bool) domyślnie true

	# nazwa error-presentera
	errorPresenter: Error   # (string|array) domyślnie 'Nette:Error'

	# definiuje aliasy dla presenterów i akcji
	aliases: ...

	# definiuje reguły tłumaczenia nazwy presentera na klasę
	mapping: ...

	# nieprawidłowe linki nie generują ostrzeżeń?
	# ma efekt tylko w trybie deweloperskim
	silentLinks: ...        # (bool) domyślnie false

Od wersji nette/application 3.2 można zdefiniować parę error-presenterów:

application:
	errorPresenter:
		4xx: Error4xx   # dla wyjątku Nette\Application\BadRequestException
		5xx: Error5xx   # dla pozostałych wyjątków

Opcja silentLinks określa, jak Nette zachowa się w trybie deweloperskim, gdy generowanie linku nie powiodło się (np. dlatego, że presenter nie istnieje itp.). Domyślna wartość false oznacza, że Nette zgłosi błąd E_USER_WARNING. Ustawienie na true spowoduje stłumienie tego komunikatu błędu. W środowisku produkcyjnym E_USER_WARNING jest zawsze zgłaszany. To zachowanie możemy również kontrolować, ustawiając zmienną presentera $invalidLinkMode.

Aliasy upraszczają linkowanie 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. Sposób, w jaki Nette wyszukuje presentery, można skonfigurować:

application:
	# szukać presenterów w Composer class map?
	scanComposer: ...      # (bool) domyślnie true

	# maska, której musi odpowiadać 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 podane w scanDirs nie nadpisują wartości domyślnej %appDir%, ale uzupełniają ją, więc scanDirs będzie zawierać obie ścieżki %appDir% i %vendorDir%/mymodule. Jeśli chcielibyśmy pominąć katalog domyślny, użyjemy wykrzyknika, który nadpisze wartość:

application:
	scanDirs!:
		- %vendorDir%/mymodule

Skanowanie katalogów można wyłączyć, podając wartość false. Nie zalecamy całkowitego wyłączania automatycznego dodawania presenterów, ponieważ w przeciwnym razie dojdzie do obniżenia wydajności aplikacji.

Szablony Latte

Tym ustawieniem można globalnie wpłynąć na zachowanie Latte w komponentach i presenterach.

latte:
	# wyświetlić panel Latte w Tracy Bar dla głównego szablonu (true) lub wszystkich komponentów (all)?
	debugger: ...        # (true|false|'all') domyślnie true

	# generuje szablony z nagłówkiem declare(strict_types=1)
	strictTypes: ...     # (bool) domyślnie false

	# włącza tryb [ścisłego parsera |latte:develop#striktní režim]
	strictParsing: ...   # (bool) domyślnie false

	# aktywuje [kontrolę wygenerowanego kodu |latte:develop#Kontrola vygenerovaného kódu]
	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

Jeśli używasz Latte w wersji 3, możesz dodawać nowe rozszerzenia za pomocą:

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

Jeśli używasz Latte w wersji 2, możesz rejestrować nowe tagi, podając nazwę klasy lub referencję do usługi. Domyślnie wywoływana jest metoda install(), ale można to zmienić, podając nazwę innej metody:

latte:
	# rejestracja niestandardowych znaczników Latte
	macros:
		- App\MyLatteMacros::register         # metoda statyczna, nazwa klasy lub callable
		- @App\MyLatteMacrosFactory           # usługa z metodą install()
		- @App\MyLatteMacrosFactory::register # usługa z metodą register()

services:
	- App\MyLatteMacrosFactory

Routing

Podstawowe ustawienia:

routing:
	# wyświetlić panel routingu w Tracy Bar?
	debugger: ...   # (bool) domyślnie true

	# serializuje router do kontenera DI
	cache: ...      # (bool) domyślnie false

Routing zazwyczaj definiujemy w klasie RouterFactory. Alternatywnie trasy można definiować również w konfiguracji za pomocą par maska: akcja, ale ten sposób nie oferuje tak szerokiej zmienności w ustawieniach:

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

Stałe

Tworzenie stałych PHP.

constants:
	Foobar: 'baz'

Po uruchomieniu aplikacji zostanie utworzona stała Foobar.

Stałe nie powinny służyć jako swego rodzaju globalnie dostępne zmienne. Do przekazywania wartości do obiektów wykorzystaj dependency injection.

PHP

Ustawienia dyrektyw PHP. Przegląd wszystkich dyrektyw znajdziesz na php.net.

php:
	date.timezone: Europe/Prague

Usługi DI

Te usługi są dodawane do kontenera DI:

Nazwa Typ Opis
application.application Nette\Application\Application uruchamiacz całej aplikacji
application.linkGenerator Nette\Application\LinkGenerator LinkGenerator
application.presenterFactory Nette\Application\PresenterFactory fabryka presenterów
application.### Nette\Application\UI\Presenter poszczególne presentery
latte.latteFactory Nette\Bridges\ApplicationLatte\LatteFactory fabryka obiektu Latte\Engine
latte.templateFactory Nette\Application\UI\TemplateFactory fabryka dla $this->template