Nette Documentation Preview

syntax
Fogalomtár
**********


AJAX .[#toc-ajax]
-----------------
Aszinkron JavaScript és XML - a HTTP protokollon keresztüli kliens-szerver kommunikáció technológiája, amely nem teszi szükségessé az egész oldal újratöltését minden egyes kérés során. A betűszó ellenére az XML helyett gyakran [JSON |#JSON] formátumot használnak.


Bemutató művelet .[#toc-presenter-action]
-----------------------------------------
A [prezenter |#presenter] logikai része, amely egy műveletet hajt végre, például egy termékoldal megjelenítése, egy felhasználó kijelentkezése stb. Egy bemutatóhoz több művelet is tartozhat.


BOM
---
Az úgynevezett *byte order mask* egy speciális első karakter egy fájlban, és a kódolásban a bájtsorrendet jelzi. Néhány szerkesztő automatikusan tartalmazza, gyakorlatilag láthatatlan, de problémákat okoz a fejlécekkel és a PHP-n belülről történő kimeneti küldéssel. A [Code Checker |code-checker:] segítségével tömegesen eltávolítható.


Vezérlő .[#toc-controller]
--------------------------
A vezérlő feldolgozza a felhasználó kéréseit, és azok alapján meghívja az adott alkalmazás logikáját (azaz a [modellt |#model]), majd meghívja [a nézetet |#view] az adatok megjelenítéséhez. A kontrollerek analógiája a Nette Frameworkben a [prezenterek |#presenter].


Oldalközi szkriptelés (XSS) .[#toc-cross-site-scripting-xss]
------------------------------------------------------------
A Cross-Site Scripting egy webhely megzavarásának módszere, amely a nem kimentett bemenetet használja. A támadó saját HTML- vagy JavaScript-kódot juttathat be, és megváltoztathatja az oldal kinézetét, vagy akár érzékeny információkat is gyűjthet a felhasználókról. Az XSS elleni védelem egyszerű: az összes karakterlánc és bemenet következetes és helyes escapingje.

A Nette Framework egy vadonatúj technológiával, a [Context-Aware Escapinggel |latte:safety-first#context-aware-escaping] áll elő, amely örökre megszabadítja Önt a Cross-Site Scripting kockázatoktól. Az összes bemenetet automatikusan eszkábálja az adott kontextus alapján, így lehetetlen, hogy egy programozó véletlenül elfelejtsen valamit.


Oldalközi kérés meghamisítása (CSRF) .[#toc-cross-site-request-forgery-csrf]
----------------------------------------------------------------------------
A Cross-Site Request Forgery támadás lényege, hogy a támadó egy olyan oldal meglátogatására csalja az áldozatot, amely némán végrehajt egy kérést az áldozat böngészőjében a szerver felé, ahol az áldozat éppen bejelentkezve van, és a szerver azt hiszi, hogy a kérést az áldozat akaratából tette. A szerver az áldozat személyazonossága alatt, de az áldozat tudta nélkül hajt végre egy bizonyos műveletet. Ez lehet adatok módosítása vagy törlése, üzenet küldése stb.

A Nette Framework **automatikusan védi a prezenterekben lévő űrlapokat és jeleket** az ilyen típusú támadásoktól. Ez úgy történik, hogy megakadályozza, hogy egy másik tartományból küldjék vagy hívják őket.


Függőségi injekció .[#toc-dependency-injection]
-----------------------------------------------
A Dependency Injection (DI) egy tervezési minta, amely megmondja, hogyan lehet az objektumok létrehozását elválasztani a függőségüktől. Vagyis egy osztály nem felelős a függőségek létrehozásáért vagy inicializálásáért, hanem ezeket a függőségeket külső kód biztosítja (ami lehet egy [DI konténer |#Dependency Injection container] is). Ennek előnye, hogy nagyobb kódrugalmasságot, jobb olvashatóságot és könnyebb alkalmazástesztelést tesz lehetővé, mivel a függőségek könnyen cserélhetők és elszigetelhetők a kód más részeitől. További információért lásd: [Mi a Dependency Injection? |dependency-injection:introduction]


Függőségi injektálás konténer .[#toc-dependency-injection-container]
--------------------------------------------------------------------
A Dependency Injection konténer (más néven DI konténer vagy IoC konténer) egy olyan eszköz, amely a függőségek létrehozását és kezelését kezeli egy alkalmazásban (vagy [szolgáltatásban |#service]). A konténer általában rendelkezik egy konfigurációval, amely meghatározza, hogy mely osztályok függenek más osztályoktól, milyen konkrét függőségi implementációkat használjon, és hogyan hozza létre ezeket a függőségeket. A konténer ezután létrehozza ezeket az objektumokat, és biztosítja azokat az osztályok számára, amelyeknek szükségük van rájuk. További információért lásd: [Mi az a DI konténer? |dependency-injection:container]


A megkerülése .[#toc-escaping]
------------------------------
Az Escaping az adott kontextusban különleges jelentéssel bíró karakterek átalakítása más, egyenértékű szekvenciákká. Példa: Idézőjeleket akarunk írni idézőjelekkel körülvett karakterláncba. Mivel az idézőjelek különleges jelentéssel bírnak az idézőjelekkel körülvett karakterlánc kontextusában, szükség van egy másik egyenértékű szekvencia használatára. A konkrét szekvenciát a kontextus szabályai határozzák meg (pl. `\"` a PHP idézőjelekkel zárt karakterláncában, `"` a HTML attribútumokban stb.).


Szűrő (korábban Helper) .[#toc-filter-formerly-helper]
------------------------------------------------------
Szűrő funkció. A sablonokban a [szűrő |latte:syntax#filters] egy olyan függvény, amely segít megváltoztatni vagy formázni az adatokat a kimeneti formára. A sablonok számos [szabványos szűrővel |latte:filters] rendelkeznek előre definiálva.


Érvénytelenítés .[#toc-invalidation]
------------------------------------
Értesítés egy újraolvasandó [részletről |#snippet]. Más összefüggésben a gyorsítótár törlése is.


JSON .[#toc-json]
-----------------
JavaScript szintaxison alapuló adatcsere formátum (ez annak részhalmaza). Pontos specifikációja a www.json.org oldalon található.


Komponens .[#toc-component]
---------------------------
Egy alkalmazás újrafelhasználható része. Lehet egy oldal vizuális része, ahogyan azt az [application:components] fejezetben leírtuk, vagy a kifejezés állhat a [Component |component-model:] osztályra is (egy ilyen komponensnek nem kell vizuálisnak lennie).


Vezérlő karakterek .[#toc-control-characters]
---------------------------------------------
A vezérlő karakterek olyan láthatatlan karakterek, amelyek előfordulhatnak egy szövegben, és esetleg problémákat okozhatnak. A fájlokból való tömeges eltávolításukhoz a [Code Checker |code-checker:], a változókból való eltávolításukhoz a [Strings::normalize() |utils:strings#normalize] függvényt használhatjuk.


Események .[#toc-events]
------------------------
Az esemény egy olyan várható helyzet az objektumban, amelynek bekövetkezésekor az úgynevezett kezelőket, azaz az eseményre reagáló visszahívókat ("minta":https://gist.github.com/dg/332cdd51bdf7d66a6d8003b134508a38) hívja meg. Az esemény lehet például űrlapküldés, felhasználói bejelentkezés stb. Az események tehát a *Inversion of Control* egy formája.

Például egy felhasználói bejelentkezés a `Nette\Security\User::login()` metódusban történik. A `User` objektumnak van egy nyilvános változója `$onLoggedIn`, amely egy tömb, amelyhez bárki hozzáadhat egy visszahívást. Amint a felhasználó bejelentkezik, a `login()` metódus meghívja a tömbben lévő összes callbacket. A változó neve a `onXyz` formában a Nette egész területén használt konvenció.


Latte .[#toc-latte]
-------------------
Az egyik leginnovatívabb [templating rendszer |latte:].


Modell .[#toc-model]
--------------------
A modell az egész alkalmazás adat- és funkcióalapját jelenti. Tartalmazza a teljes alkalmazási logikát (néha "üzleti logikának" is nevezik). Ez a **M** a **M**VC vagy MPV **M****-jének **M**. Minden felhasználói művelet (bejelentkezés, kosárba helyezés, adatbázis-érték módosítása) a modell műveletét jelenti.

A modell kezeli a belső állapotát, és nyilvános interfészt biztosít. Ennek az interfésznek a meghívásával vehetjük át vagy változtathatjuk meg az állapotát. A modell nem tud a [nézet |#view] vagy a [vezérlő |#controller] létezéséről, a modell teljesen független tőlük.


Modell-nézet-vezérlő .[#toc-model-view-controller]
--------------------------------------------------
Szoftverarchitektúra, amely a GUI-alkalmazások fejlesztésénél alakult ki, hogy elválassza a folyamatkezelés kódját ([controller |#controller]) az alkalmazási logika kódjától ([model |#model]) és az adatmegjelenítő kódtól ([view |#view]). Így a kód jobban érthető, megkönnyíti a későbbi fejlesztést, és lehetővé teszi a különálló részek külön tesztelését.


Modell-nézet-bemutató .[#toc-model-view-presenter]
--------------------------------------------------
[Model-View-Controller |#Model-View-Controller] alapú architektúra.


Modul .[#toc-module]
--------------------
[A modul |application:modules] a Nette Frameworkben bemutatók és sablonok, esetleg komponensek és modellek gyűjteményét jelenti, amelyek adatokat szolgáltatnak egy bemutatónak. Tehát egy alkalmazás bizonyos logikai része.

Például egy webáruháznak három modulja lehet:
1) Termékkatalógus a kosárral.
2) Adminisztráció a vásárló számára.
3) Adminisztráció a boltvezető számára.


Névtér .[#toc-namespace]
------------------------
A névtér a PHP nyelv 5.3-as verziójától kezdve és néhány más programozási nyelvben is megtalálható. Segít elkerülni a névütközéseket (pl. két azonos nevű osztály), amikor különböző könyvtárakat használunk együtt. További részletekért lásd a [PHP dokumentációját |https://www.php.net/manual/en/language.namespaces.rationale.php].


Bemutató .[#toc-presenter]
--------------------------
A Presenter egy objektum, amely átveszi a HTTP-kérésből a router által lefordított [kérést |api:Nette\Application\Request], és [választ |api:Nette\Application\Response] generál. A válasz lehet HTML oldal, kép, XML dokumentum, fájl, JSON, átirányítás vagy bármi, ami eszedbe jut.

Presenter alatt általában a [api:Nette\Application\UI\Presenter] osztály leszármazottját értik. A kérések alatt a megfelelő [műveleteket |application:presenters#life-cycle-of-presenter] futtatja és a sablonokat rendereli.


Router .[#toc-router]
---------------------
Kétirányú fordító a HTTP-kérés/URL és a prezentáló művelet között. A kétirányúság azt jelenti, hogy nem csak a HTTP-kérésből lehet levezetni egy [prezenter-akciót |#presenter action], hanem a megfelelő URL-t is lehet generálni egy akcióhoz. Lásd bővebben az [URL útválasztásról |application:routing] szóló fejezetben.


SameSite cookie .[#toc-samesite-cookie]
---------------------------------------
A SameSite cookie-k egy olyan mechanizmust biztosítanak, amely felismeri, hogy mi vezetett az oldal betöltéséhez. Három értéke lehet: `Lax`, `Strict` és `None` (ez utóbbi HTTPS-t igényel). Ha az oldalra irányuló kérés közvetlenül a webhelyről érkezik, vagy a felhasználó közvetlenül a címsorba beírva vagy egy könyvjelzőre kattintva nyitja meg az oldalt, a böngésző az összes cookie-t elküldi a szervernek (azaz a `Lax`, `Strict` és `None` jelekkel). Ha a felhasználó egy másik webhelyről származó hivatkozáson keresztül kattint az oldalra, a `Lax` és `None` jelzővel ellátott cookie-kat továbbítja a szervernek. Ha a kérés más módon történik, például egy másik webhelyről származó POST űrlap elküldésével, iframe-en belüli betöltéssel, JavaScript használatával stb., csak a `None` jelű cookie-kat küldi a rendszer.


Szolgáltatás .[#toc-service]
----------------------------
A Dependency Injection kontextusában a szolgáltatás olyan objektumra utal, amelyet egy DI konténer hoz létre és kezel. Egy szolgáltatás könnyen lecserélhető egy másik implementációra, például tesztelési céllal vagy az alkalmazás viselkedésének megváltoztatására, anélkül, hogy a szolgáltatást használó kódot módosítani kellene.


Snippet .[#toc-snippet]
-----------------------
Egy olyan oldalrészlet, amely egy [AJAX-kérés |#AJAX] során külön-külön újra megjeleníthető.


Nézet .[#toc-view]
------------------
A nézet az alkalmazás egy olyan rétege, amely a kérés eredményeinek megjelenítéséért felelős. Általában templating rendszert használ, és tudja, hogyan kell megjeleníteni a modellből vett komponenseket vagy eredményeket.



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

Fogalomtár

AJAX

Aszinkron JavaScript és XML – a HTTP protokollon keresztüli kliens-szerver kommunikáció technológiája, amely nem teszi szükségessé az egész oldal újratöltését minden egyes kérés során. A betűszó ellenére az XML helyett gyakran JSON formátumot használnak.

Bemutató művelet

prezenter logikai része, amely egy műveletet hajt végre, például egy termékoldal megjelenítése, egy felhasználó kijelentkezése stb. Egy bemutatóhoz több művelet is tartozhat.

BOM

Az úgynevezett byte order mask egy speciális első karakter egy fájlban, és a kódolásban a bájtsorrendet jelzi. Néhány szerkesztő automatikusan tartalmazza, gyakorlatilag láthatatlan, de problémákat okoz a fejlécekkel és a PHP-n belülről történő kimeneti küldéssel. A Code Checker segítségével tömegesen eltávolítható.

Vezérlő

A vezérlő feldolgozza a felhasználó kéréseit, és azok alapján meghívja az adott alkalmazás logikáját (azaz a modellt), majd meghívja a nézetet az adatok megjelenítéséhez. A kontrollerek analógiája a Nette Frameworkben a prezenterek.

Oldalközi szkriptelés (XSS)

A Cross-Site Scripting egy webhely megzavarásának módszere, amely a nem kimentett bemenetet használja. A támadó saját HTML- vagy JavaScript-kódot juttathat be, és megváltoztathatja az oldal kinézetét, vagy akár érzékeny információkat is gyűjthet a felhasználókról. Az XSS elleni védelem egyszerű: az összes karakterlánc és bemenet következetes és helyes escapingje.

A Nette Framework egy vadonatúj technológiával, a Context-Aware Escapinggel áll elő, amely örökre megszabadítja Önt a Cross-Site Scripting kockázatoktól. Az összes bemenetet automatikusan eszkábálja az adott kontextus alapján, így lehetetlen, hogy egy programozó véletlenül elfelejtsen valamit.

Oldalközi kérés meghamisítása (CSRF)

A Cross-Site Request Forgery támadás lényege, hogy a támadó egy olyan oldal meglátogatására csalja az áldozatot, amely némán végrehajt egy kérést az áldozat böngészőjében a szerver felé, ahol az áldozat éppen bejelentkezve van, és a szerver azt hiszi, hogy a kérést az áldozat akaratából tette. A szerver az áldozat személyazonossága alatt, de az áldozat tudta nélkül hajt végre egy bizonyos műveletet. Ez lehet adatok módosítása vagy törlése, üzenet küldése stb.

A Nette Framework automatikusan védi a prezenterekben lévő űrlapokat és jeleket az ilyen típusú támadásoktól. Ez úgy történik, hogy megakadályozza, hogy egy másik tartományból küldjék vagy hívják őket.

Függőségi injekció

A Dependency Injection (DI) egy tervezési minta, amely megmondja, hogyan lehet az objektumok létrehozását elválasztani a függőségüktől. Vagyis egy osztály nem felelős a függőségek létrehozásáért vagy inicializálásáért, hanem ezeket a függőségeket külső kód biztosítja (ami lehet egy DI konténer is). Ennek előnye, hogy nagyobb kódrugalmasságot, jobb olvashatóságot és könnyebb alkalmazástesztelést tesz lehetővé, mivel a függőségek könnyen cserélhetők és elszigetelhetők a kód más részeitől. További információért lásd: Mi a Dependency Injection?

Függőségi injektálás konténer

A Dependency Injection konténer (más néven DI konténer vagy IoC konténer) egy olyan eszköz, amely a függőségek létrehozását és kezelését kezeli egy alkalmazásban (vagy szolgáltatásban). A konténer általában rendelkezik egy konfigurációval, amely meghatározza, hogy mely osztályok függenek más osztályoktól, milyen konkrét függőségi implementációkat használjon, és hogyan hozza létre ezeket a függőségeket. A konténer ezután létrehozza ezeket az objektumokat, és biztosítja azokat az osztályok számára, amelyeknek szükségük van rájuk. További információért lásd: Mi az a DI konténer?

A megkerülése

Az Escaping az adott kontextusban különleges jelentéssel bíró karakterek átalakítása más, egyenértékű szekvenciákká. Példa: Idézőjeleket akarunk írni idézőjelekkel körülvett karakterláncba. Mivel az idézőjelek különleges jelentéssel bírnak az idézőjelekkel körülvett karakterlánc kontextusában, szükség van egy másik egyenértékű szekvencia használatára. A konkrét szekvenciát a kontextus szabályai határozzák meg (pl. \" a PHP idézőjelekkel zárt karakterláncában, " a HTML attribútumokban stb.).

Szűrő (korábban Helper)

Szűrő funkció. A sablonokban a szűrő egy olyan függvény, amely segít megváltoztatni vagy formázni az adatokat a kimeneti formára. A sablonok számos szabványos szűrővel rendelkeznek előre definiálva.

Érvénytelenítés

Értesítés egy újraolvasandó részletről. Más összefüggésben a gyorsítótár törlése is.

JSON

JavaScript szintaxison alapuló adatcsere formátum (ez annak részhalmaza). Pontos specifikációja a www.json.org oldalon található.

Komponens

Egy alkalmazás újrafelhasználható része. Lehet egy oldal vizuális része, ahogyan azt az components fejezetben leírtuk, vagy a kifejezés állhat a Component osztályra is (egy ilyen komponensnek nem kell vizuálisnak lennie).

Vezérlő karakterek

A vezérlő karakterek olyan láthatatlan karakterek, amelyek előfordulhatnak egy szövegben, és esetleg problémákat okozhatnak. A fájlokból való tömeges eltávolításukhoz a Code Checker, a változókból való eltávolításukhoz a Strings::normalize() függvényt használhatjuk.

Események

Az esemény egy olyan várható helyzet az objektumban, amelynek bekövetkezésekor az úgynevezett kezelőket, azaz az eseményre reagáló visszahívókat (minta) hívja meg. Az esemény lehet például űrlapküldés, felhasználói bejelentkezés stb. Az események tehát a Inversion of Control egy formája.

Például egy felhasználói bejelentkezés a Nette\Security\User::login() metódusban történik. A User objektumnak van egy nyilvános változója $onLoggedIn, amely egy tömb, amelyhez bárki hozzáadhat egy visszahívást. Amint a felhasználó bejelentkezik, a login() metódus meghívja a tömbben lévő összes callbacket. A változó neve a onXyz formában a Nette egész területén használt konvenció.

Latte

Az egyik leginnovatívabb templating rendszer.

Modell

A modell az egész alkalmazás adat- és funkcióalapját jelenti. Tartalmazza a teljes alkalmazási logikát (néha „üzleti logikának“ is nevezik). Ez a M a MVC vagy MPV M****-jének **M. Minden felhasználói művelet (bejelentkezés, kosárba helyezés, adatbázis-érték módosítása) a modell műveletét jelenti.

A modell kezeli a belső állapotát, és nyilvános interfészt biztosít. Ennek az interfésznek a meghívásával vehetjük át vagy változtathatjuk meg az állapotát. A modell nem tud a nézet vagy a vezérlő létezéséről, a modell teljesen független tőlük.

Modell-nézet-vezérlő

Szoftverarchitektúra, amely a GUI-alkalmazások fejlesztésénél alakult ki, hogy elválassza a folyamatkezelés kódját (controller) az alkalmazási logika kódjától (model) és az adatmegjelenítő kódtól (view). Így a kód jobban érthető, megkönnyíti a későbbi fejlesztést, és lehetővé teszi a különálló részek külön tesztelését.

Modell-nézet-bemutató

Model-View-Controller alapú architektúra.

Modul

A modul a Nette Frameworkben bemutatók és sablonok, esetleg komponensek és modellek gyűjteményét jelenti, amelyek adatokat szolgáltatnak egy bemutatónak. Tehát egy alkalmazás bizonyos logikai része.

Például egy webáruháznak három modulja lehet:

  1. Termékkatalógus a kosárral.
  2. Adminisztráció a vásárló számára.
  3. Adminisztráció a boltvezető számára.

Névtér

A névtér a PHP nyelv 5.3-as verziójától kezdve és néhány más programozási nyelvben is megtalálható. Segít elkerülni a névütközéseket (pl. két azonos nevű osztály), amikor különböző könyvtárakat használunk együtt. További részletekért lásd a PHP dokumentációját.

Bemutató

A Presenter egy objektum, amely átveszi a HTTP-kérésből a router által lefordított kérést, és választ generál. A válasz lehet HTML oldal, kép, XML dokumentum, fájl, JSON, átirányítás vagy bármi, ami eszedbe jut.

Presenter alatt általában a Nette\Application\UI\Presenter osztály leszármazottját értik. A kérések alatt a megfelelő műveleteket futtatja és a sablonokat rendereli.

Router

Kétirányú fordító a HTTP-kérés/URL és a prezentáló művelet között. A kétirányúság azt jelenti, hogy nem csak a HTTP-kérésből lehet levezetni egy prezenter-akciót, hanem a megfelelő URL-t is lehet generálni egy akcióhoz. Lásd bővebben az URL útválasztásról szóló fejezetben.

A SameSite cookie-k egy olyan mechanizmust biztosítanak, amely felismeri, hogy mi vezetett az oldal betöltéséhez. Három értéke lehet: Lax, Strict és None (ez utóbbi HTTPS-t igényel). Ha az oldalra irányuló kérés közvetlenül a webhelyről érkezik, vagy a felhasználó közvetlenül a címsorba beírva vagy egy könyvjelzőre kattintva nyitja meg az oldalt, a böngésző az összes cookie-t elküldi a szervernek (azaz a Lax, Strict és None jelekkel). Ha a felhasználó egy másik webhelyről származó hivatkozáson keresztül kattint az oldalra, a Lax és None jelzővel ellátott cookie-kat továbbítja a szervernek. Ha a kérés más módon történik, például egy másik webhelyről származó POST űrlap elküldésével, iframe-en belüli betöltéssel, JavaScript használatával stb., csak a None jelű cookie-kat küldi a rendszer.

Szolgáltatás

A Dependency Injection kontextusában a szolgáltatás olyan objektumra utal, amelyet egy DI konténer hoz létre és kezel. Egy szolgáltatás könnyen lecserélhető egy másik implementációra, például tesztelési céllal vagy az alkalmazás viselkedésének megváltoztatására, anélkül, hogy a szolgáltatást használó kódot módosítani kellene.

Snippet

Egy olyan oldalrészlet, amely egy AJAX-kérés során külön-külön újra megjeleníthető.

Nézet

A nézet az alkalmazás egy olyan rétege, amely a kérés eredményeinek megjelenítéséért felelős. Általában templating rendszert használ, és tudja, hogyan kell megjeleníteni a modellből vett komponenseket vagy eredményeket.