Nette Documentation Preview

syntax
Slovníček pojmů
***************


AJAX
----
Asynchronous JavaScript and XML - technologie výměny informací mezi klientem a serverem přes HTTP protokol bez nutnosti znovunačtení celé stránky při každém požadavku. Ačkoliv by se mohlo z názvu zdát, že posílá data pouze ve formátu XML, běžně se používá také formát [#JSON].


Akce presenteru
---------------
Logická část presenteru, která vykonává jednu akci. Například zobrazí stránku produktu, odhlásí uživatele apod. Jeden presenter může mít více akcí.


BOM
---
Tzv. *byte order mark* je speciální první znak v souboru, který se používá jako indikátor pořadí bajtů v kódování. Některé editory ho do souborů vkládají. Je prakticky neviditelný, ale způsobuje problémy s odesíláním výstupu a hlaviček z PHP. K hromadnému odstranění můžete použít [Code Checker|code-checker:].


Controller
----------
Řadič, který zpracovává požadavky uživatele a na jejich základě pak volá patřičnou aplikační logiku (tj. [#model]) a poté požádá [#view] o vykreslení dat. Obdobou kontrolerů v Nette Frameworku jsou [presentery|#presenter].


Cross-Site Scripting (XSS)
--------------------------
Cross-Site Scripting je metoda narušení webových stránek zneužívající neošetřených výstupů. Útočník pak dokáže do stránky podstrčit svůj vlastní kód a tím může stránku pozměnit nebo dokonce získat citlivé údaje o návštěvnících. Proti XSS se lze bránit jen důsledným a korektním ošetřením všech řetězců.

Nette Framework přichází s revoluční technologií [Context-Aware Escaping |latte:safety-first#Kontextově sensitivní escapování], která vás provždy zbaví rizika Cross-Site Scriptingu. Všechny výstupy totiž ošetřuje automaticky a tak se nemůže stát, že by kodér na něco zapomněl.


Cross-Site Request Forgery (CSRF)
---------------------------------
Útok Cross-Site Request Forgery spočívá v tom, že útočník naláká oběť na stránku, která nenápadně v prohlížeči oběti vykoná požadavek na server, na kterém je oběť přihlášena, a server se domnívá, že požadavek vykonala oběť o své vůli. A tak pod identitou oběti provede určitý úkon, aniž by ta o tom věděla. Může jít o změnu nebo smazání dat, odeslání zprávy atd.

Nette Framework **automaticky chrání formuláře a signály v presenterech** před tímto typem útoku. A to tím, že zabraňuje jejich odeslání či vyvolání z jiné domény.


Dependency Injection
--------------------
Dependency Injection (DI) je návrhový vzor, který říká, jak oddělit vytváření objektů od jejich závislostí. Tedy že třída není zodpovědná za vytváření nebo inicializaci svých závislostí, ale místo toho jsou jí tyto závislosti poskytovány externím kódem (tím může i [DI kontejner|#Dependency Injection kontejner]). Výhoda spočívá v tom, že umožňuje větší flexibilitu kódu, lepší srozumitelnost a snazší testování aplikace, protože závislosti jsou snadno nahraditelné a izolované od ostatních částí kódu. Více v kapitole [Co je Dependency Injection? |dependency-injection:introduction]


Dependency Injection kontejner
------------------------------
Dependency Injection kontejner (také DI kontejner nebo IoC kontejner) je nástroj, který obstarává vytváření a správu závislostí v aplikaci (neboli [služeb|#služba]). Kontejner má většinou konfiguraci, která definuje, jaké třídy jsou závislé na jiných třídách, jaké konkrétní implementace závislostí se mají použít a jak se mají tyto závislosti vytvářet. Poté kontejner vytvoří tyto objekty a poskytne je třídám, které je potřebují. Více v kapitole [Co je DI kontejner? |dependency-injection:container]


Escapování
----------
Escapování je převod znaků majících v daném kontextu speciální význam na jiné odpovídající sekvence. Příklad: do řetězce ohraničeného uvozovkami chceme zapsat uvozovky. Jelikož uvozovky mají v kontextu řetězce speciální význam a jejich prosté zapsání by bylo chápáno jako ukončení řetězce, je potřeba je zapsat jinou odpovídající sekvencí. Jakou přesně určují pravidla kontextu.


Filter (dříve helper)
---------------------
V šablonách se pod pojmem [filter |latte:syntax#filtry] obvykle rozumí funkce, která pomáhá upravit nebo přeformátovat data do výsledné podoby. Šablony disponují několika [standardními filtry |latte:filters].


Invalidace
----------
Oznámení [snippetu |#snippet], aby se překreslil. V jiném významu také smazání obsahu cache.


JSON
----
Formát pro výměnu dat vycházející ze syntaxe JavaScriptu (je její podmnožinou). Přesnou specifikaci najdete na stránce www.json.org.


Komponenta
----------
Znovupoužitelná součást aplikace. Může to být vizuální část stránky, jak popisuje kapitola [Píšeme komponenty |application:components], nebo se pod pojmem komponenta rozumí také třída [Component |component-model:] (taková komponenta nemusí být vizuální).


Kontrolní znaky
---------------
Kontrolní znaky jsou neviditelné znaky, které se mohou vyskytovat v textu a případně i způsobovat problémy. K jejich hromadnému odstranění ze souborů můžete použít [Code Checker|code-checker:] a k odstranění z proměnné funkci [Strings::normalize()|utils:strings#normalize].


Eventy (události) .{toc: události}
----------------------------------
Událost je očekávaná situace v objektu, která když nastane, zavolají se tzv. handlery, tedy callbacky reagující na událost ("ukázka":https://gist.github.com/dg/332cdd51bdf7d66a6d8003b134508a38). Událostí může být třeba odeslání formuláře, přihlášení uživatele atd. Události jsou tak formou *Inversion of Control*.

Například k přihlášení uživatele dochází v metodě `Nette\Security\User::login()`. Objekt `User` má veřejnou proměnnou `$onLoggedIn`, což je pole, do kterého kdokoliv může přidat callback. V okamžiku, kdy se uživatel přihláší, tak metoda `login()` zavolá všechny callbacky v poli. Název proměnné ve tvaru `onXyz` je konvence používaná v celém Nette.


Latte
-----
Jeden z nejpokrokovějších [šablonovacích systémů |latte:].


Model
-----
Model je datový a zejména funkční základ celé aplikace. Je v něm obsažena celá aplikační logika (používá se i termín byznys logika). Je to ono **M** z **M**VC nebo MVP. Jakákoliv akce uživatele (přihlášení,  vložení zboží do košíku, změna hodnoty v databázi) představuje akci modelu.

Model si spravuje svůj vnitřní stav a ven nabízí pevně dané rozhraní. Voláním funkcí tohoto rozhraní můžeme zjišťovat či měnit jeho stav. Model neví o existenci [#view] nebo [controlleru |#controller].


Model-View-Controller
---------------------
Softwarová architektura, která vznikla z potřeby oddělit u aplikací s grafickým rozhraním kód obsluhy ([#controller]) od kódu aplikační logiky ([#model]) a od kódu zobrazujícího data ([#view]). Tím jednak aplikaci zpřehledňuje, usnadňuje budoucí vývoj a umožňuje testování jednotlivých části zvlášť.


Model-View-Presenter
--------------------
Architektura, vycházející z [#Model-View-Controller].


Modul
-----
[Modul |application:modules] představuje v Nette Framework balíček presenterů a šablon, případně i komponent a modelů, které dodávají presenteru data. Je to tedy určitá logická část aplikace.

Například e-shop může mít tři moduly:
1) katalog produktů s košíkem
2) administrace pro zákazníka
3) administrace pro provozovatele


Namespace
---------
Jmenný prostor, součást jazyka PHP od verze 5.3 a některých jiných programovacích jazyků, umožňující používání tříd, které jsou v různých knihovnách nazvány stejně, aniž by došlo ke kolizi jmen. Viz [dokumentace PHP |https://www.php.net/manual/en/language.namespaces.rationale.php].


Presenter
---------
Presenter je objekt, který vezme [požadavek |api:Nette\Application\Request] přeložený routerem z HTTP požadavku a vygeneruje [odpověď |api:Nette\Application\Response]. Odpovědí může být HTML stránka, obrázek, XML dokument, soubor na disku, JSON, přesměrování nebo cokoliv vymyslíte.

Obvykle se pod pojmem presenter myslí potomek třídy [api:Nette\Application\UI\Presenter]. Podle příchozích požadavků spouští odpovídající [akce |application:presenters#zivotni-cyklus-presenteru] a vykresluje šablony.


Router
------
Obousměrný překladač mezi HTTP požadavkem / URL a akcí presenteru. Obousměrné znamená, že z HTTP požadavku lze odvodit [akci presenteru |#akce presenteru], ale také obráceně k akci vygenerovat odpovídající URL. Více v kapitole o [routování URL |application:routing].


SameSite cookie
---------------
SameSite cookies poskytují mechanismus jak rozpoznat, co vedlo k načtení stránky. Může mít tři hodnoty: `Lax`, `Strict` a `None` (ten vyžaduje HTTPS). Pokud požadavek na stránku přichází přímo z webu nebo uživatel otevře stránku přímým zadáním do adresního řádku nebo kliknutím na záložku, prohlížeč pošle serveru všechny cookies (tedy s příznaky `Lax`, `Strict` i `None`). Pokud se uživatel na web proklikne přes odkaz z jiného webu, předají se serveru cookies s příznaky `Lax` a `None`. Pokud požadavek vznikne jiným způsobem, jako je odeslání POST formuláře z jiného webu, načtení uvnitř iframe, pomocí JavaScriptu, atd., odešlou se jen cookies s příznakem `None`.


Služba
------
V kontextu Dependency Injection se jako služba označuje objekt, který je vytvářen a spravován DI kontejnerem. Služba může být snadno nahrazena jinou implementací, například pro účely testování nebo pro změnu chování aplikace, aniž by bylo nutné upravovat kód, který službu používá.


Snippet
-------
Výstřižek, část stránky, kterou lze samostatně překreslit během AJAXového požadavku.


View
----
View, tedy pohled, je vrstva aplikace, která má na starost zobrazení výsledku požadavku. Obvykle používá šablonovací systém a ví, jak se má zobrazit ta která komponenta nebo výsledek získaný z modelu.



/--comment
Pokyny pro autory:
- vysvětlení by mělo být stručné, cca 1 odstavec (kde nestačí stručné vysvětlení, musí být odkaz na jiné místo v dokumentaci)
- na pojmy zde pak lze odkazovat z jiných částí dokumentace případně z fóra
\--

{{leftbar: www:@menu-common}}
{{priority: -2}}

Slovníček pojmů

AJAX

Asynchronous JavaScript and XML – technologie výměny informací mezi klientem a serverem přes HTTP protokol bez nutnosti znovunačtení celé stránky při každém požadavku. Ačkoliv by se mohlo z názvu zdát, že posílá data pouze ve formátu XML, běžně se používá také formát JSON.

Akce presenteru

Logická část presenteru, která vykonává jednu akci. Například zobrazí stránku produktu, odhlásí uživatele apod. Jeden presenter může mít více akcí.

BOM

Tzv. byte order mark je speciální první znak v souboru, který se používá jako indikátor pořadí bajtů v kódování. Některé editory ho do souborů vkládají. Je prakticky neviditelný, ale způsobuje problémy s odesíláním výstupu a hlaviček z PHP. K hromadnému odstranění můžete použít Code Checker.

Controller

Řadič, který zpracovává požadavky uživatele a na jejich základě pak volá patřičnou aplikační logiku (tj. model) a poté požádá view o vykreslení dat. Obdobou kontrolerů v Nette Frameworku jsou presentery.

Cross-Site Scripting (XSS)

Cross-Site Scripting je metoda narušení webových stránek zneužívající neošetřených výstupů. Útočník pak dokáže do stránky podstrčit svůj vlastní kód a tím může stránku pozměnit nebo dokonce získat citlivé údaje o návštěvnících. Proti XSS se lze bránit jen důsledným a korektním ošetřením všech řetězců.

Nette Framework přichází s revoluční technologií Context-Aware Escaping, která vás provždy zbaví rizika Cross-Site Scriptingu. Všechny výstupy totiž ošetřuje automaticky a tak se nemůže stát, že by kodér na něco zapomněl.

Cross-Site Request Forgery (CSRF)

Útok Cross-Site Request Forgery spočívá v tom, že útočník naláká oběť na stránku, která nenápadně v prohlížeči oběti vykoná požadavek na server, na kterém je oběť přihlášena, a server se domnívá, že požadavek vykonala oběť o své vůli. A tak pod identitou oběti provede určitý úkon, aniž by ta o tom věděla. Může jít o změnu nebo smazání dat, odeslání zprávy atd.

Nette Framework automaticky chrání formuláře a signály v presenterech před tímto typem útoku. A to tím, že zabraňuje jejich odeslání či vyvolání z jiné domény.

Dependency Injection

Dependency Injection (DI) je návrhový vzor, který říká, jak oddělit vytváření objektů od jejich závislostí. Tedy že třída není zodpovědná za vytváření nebo inicializaci svých závislostí, ale místo toho jsou jí tyto závislosti poskytovány externím kódem (tím může i DI kontejner). Výhoda spočívá v tom, že umožňuje větší flexibilitu kódu, lepší srozumitelnost a snazší testování aplikace, protože závislosti jsou snadno nahraditelné a izolované od ostatních částí kódu. Více v kapitole Co je Dependency Injection?

Dependency Injection kontejner

Dependency Injection kontejner (také DI kontejner nebo IoC kontejner) je nástroj, který obstarává vytváření a správu závislostí v aplikaci (neboli služeb). Kontejner má většinou konfiguraci, která definuje, jaké třídy jsou závislé na jiných třídách, jaké konkrétní implementace závislostí se mají použít a jak se mají tyto závislosti vytvářet. Poté kontejner vytvoří tyto objekty a poskytne je třídám, které je potřebují. Více v kapitole Co je DI kontejner?

Escapování

Escapování je převod znaků majících v daném kontextu speciální význam na jiné odpovídající sekvence. Příklad: do řetězce ohraničeného uvozovkami chceme zapsat uvozovky. Jelikož uvozovky mají v kontextu řetězce speciální význam a jejich prosté zapsání by bylo chápáno jako ukončení řetězce, je potřeba je zapsat jinou odpovídající sekvencí. Jakou přesně určují pravidla kontextu.

Filter (dříve helper)

V šablonách se pod pojmem filter obvykle rozumí funkce, která pomáhá upravit nebo přeformátovat data do výsledné podoby. Šablony disponují několika standardními filtry.

Invalidace

Oznámení snippetu, aby se překreslil. V jiném významu také smazání obsahu cache.

JSON

Formát pro výměnu dat vycházející ze syntaxe JavaScriptu (je její podmnožinou). Přesnou specifikaci najdete na stránce www.json.org.

Komponenta

Znovupoužitelná součást aplikace. Může to být vizuální část stránky, jak popisuje kapitola Píšeme komponenty, nebo se pod pojmem komponenta rozumí také třída Component (taková komponenta nemusí být vizuální).

Kontrolní znaky

Kontrolní znaky jsou neviditelné znaky, které se mohou vyskytovat v textu a případně i způsobovat problémy. K jejich hromadnému odstranění ze souborů můžete použít Code Checker a k odstranění z proměnné funkci Strings::normalize().

Eventy (události)

Událost je očekávaná situace v objektu, která když nastane, zavolají se tzv. handlery, tedy callbacky reagující na událost (ukázka). Událostí může být třeba odeslání formuláře, přihlášení uživatele atd. Události jsou tak formou Inversion of Control.

Například k přihlášení uživatele dochází v metodě Nette\Security\User::login(). Objekt User má veřejnou proměnnou $onLoggedIn, což je pole, do kterého kdokoliv může přidat callback. V okamžiku, kdy se uživatel přihláší, tak metoda login() zavolá všechny callbacky v poli. Název proměnné ve tvaru onXyz je konvence používaná v celém Nette.

Latte

Jeden z nejpokrokovějších šablonovacích systémů.

Model

Model je datový a zejména funkční základ celé aplikace. Je v něm obsažena celá aplikační logika (používá se i termín byznys logika). Je to ono MMVC nebo MVP. Jakákoliv akce uživatele (přihlášení, vložení zboží do košíku, změna hodnoty v databázi) představuje akci modelu.

Model si spravuje svůj vnitřní stav a ven nabízí pevně dané rozhraní. Voláním funkcí tohoto rozhraní můžeme zjišťovat či měnit jeho stav. Model neví o existenci view nebo controlleru.

Model-View-Controller

Softwarová architektura, která vznikla z potřeby oddělit u aplikací s grafickým rozhraním kód obsluhy (controller) od kódu aplikační logiky (model) a od kódu zobrazujícího data (view). Tím jednak aplikaci zpřehledňuje, usnadňuje budoucí vývoj a umožňuje testování jednotlivých části zvlášť.

Model-View-Presenter

Architektura, vycházející z Model-View-Controller.

Modul

Modul představuje v Nette Framework balíček presenterů a šablon, případně i komponent a modelů, které dodávají presenteru data. Je to tedy určitá logická část aplikace.

Například e-shop může mít tři moduly:

  1. katalog produktů s košíkem
  2. administrace pro zákazníka
  3. administrace pro provozovatele

Namespace

Jmenný prostor, součást jazyka PHP od verze 5.3 a některých jiných programovacích jazyků, umožňující používání tříd, které jsou v různých knihovnách nazvány stejně, aniž by došlo ke kolizi jmen. Viz dokumentace PHP.

Presenter

Presenter je objekt, který vezme požadavek přeložený routerem z HTTP požadavku a vygeneruje odpověď. Odpovědí může být HTML stránka, obrázek, XML dokument, soubor na disku, JSON, přesměrování nebo cokoliv vymyslíte.

Obvykle se pod pojmem presenter myslí potomek třídy Nette\Application\UI\Presenter. Podle příchozích požadavků spouští odpovídající akce a vykresluje šablony.

Router

Obousměrný překladač mezi HTTP požadavkem / URL a akcí presenteru. Obousměrné znamená, že z HTTP požadavku lze odvodit akci presenteru, ale také obráceně k akci vygenerovat odpovídající URL. Více v kapitole o routování URL.

SameSite cookies poskytují mechanismus jak rozpoznat, co vedlo k načtení stránky. Může mít tři hodnoty: Lax, Strict a None (ten vyžaduje HTTPS). Pokud požadavek na stránku přichází přímo z webu nebo uživatel otevře stránku přímým zadáním do adresního řádku nebo kliknutím na záložku, prohlížeč pošle serveru všechny cookies (tedy s příznaky Lax, Strict i None). Pokud se uživatel na web proklikne přes odkaz z jiného webu, předají se serveru cookies s příznaky Lax a None. Pokud požadavek vznikne jiným způsobem, jako je odeslání POST formuláře z jiného webu, načtení uvnitř iframe, pomocí JavaScriptu, atd., odešlou se jen cookies s příznakem None.

Služba

V kontextu Dependency Injection se jako služba označuje objekt, který je vytvářen a spravován DI kontejnerem. Služba může být snadno nahrazena jinou implementací, například pro účely testování nebo pro změnu chování aplikace, aniž by bylo nutné upravovat kód, který službu používá.

Snippet

Výstřižek, část stránky, kterou lze samostatně překreslit během AJAXového požadavku.

View

View, tedy pohled, je vrstva aplikace, která má na starost zobrazení výsledku požadavku. Obvykle používá šablonovací systém a ví, jak se má zobrazit ta která komponenta nebo výsledek získaný z modelu.