Słowniczek pojęć

AJAX

Asynchronous JavaScript and XML – technologia wymiany informacji między klientem a serwerem przez protokół HTTP bez potrzeby przeładowywania całej strony przy każdym żądaniu. Choć nazwa może sugerować, że dane wysyłane są tylko w formacie XML, powszechnie używany jest także format JSON.

Akcja presentera

Logiczna część presentera wykonująca jedną czynność. Na przykład wyświetlenie strony produktu, wylogowanie użytkownika itd. Jeden presenter może mieć wiele akcji.

BOM

Byte order mark to specjalny pierwszy znak w pliku używany jako wskaźnik kolejności bajtów w kodowaniu. Niektóre edytory wstawiają go do plików. Jest praktycznie niewidoczny, ale sprawia problemy przy wysyłaniu wyjścia i nagłówków z PHP. Do masowego usunięcia możesz użyć Code Checkera.

Controller

Kontroler, który przetwarza żądania użytkownika i na ich podstawie wywołuje odpowiednią logikę aplikacji (czyli Model), a następnie prosi View o wyrenderowanie danych. Odpowiednikiem kontrolerów w Nette Framework są presentery.

Cross-Site Scripting (XSS)

Cross-Site Scripting to metoda zakłócania działania stron przez wykorzystanie nieescapowanych wyjść. Atakujący może wtedy wstrzyknąć na stronę własny kod i tym samym zmodyfikować stronę albo nawet uzyskać wrażliwe dane odwiedzających. Ochrona przed XSS polega na konsekwentnym i poprawnym escapowaniu wszystkich wypisywanych ciągów.

Nette Framework wprowadza rewolucyjną technologię Context-Aware Escaping, która trwale eliminuje ryzyko Cross-Site Scriptingu. Automatycznie escapuje wszystkie wyjścia, więc programista nie może o niczym zapomnieć.

Cross-Site Request Forgery (CSRF)

Atak Cross-Site Request Forgery polega na tym, że atakujący zwabia ofiarę na stronę, która niepostrzeżenie wykonuje w przeglądarce ofiary żądanie do serwera, na którym ofiara jest zalogowana. Serwer uznaje, że żądanie zostało wykonane dobrowolnie przez ofiarę. Pod tożsamością ofiary wykonuje więc akcję bez jej wiedzy. Może chodzić o zmianę albo usunięcie danych, wysłanie wiadomości itd.

Nette Framework automatycznie chroni formularze i sygnały w presenterach przed tym typem ataku, uniemożliwiając ich wysłanie albo wywołanie z innej domeny.

Cross-Origin Resource Sharing (CORS)

CORS to mechanizm bezpieczeństwa pozwalający stronie webowej wykonywać z JavaScriptu żądania do innej domeny niż ta, z której strona została wczytana. Bez CORS przeglądarki blokują takie żądania ze względów bezpieczeństwa.

Jeśli na przykład Twoja strona działa pod https://myapp.com i próbuje pobrać dane z https://api.example.com za pomocą JavaScriptu (AJAX, Fetch API), przeglądarka sprawdzi, czy serwer API zezwala na to żądanie cross-origin. Serwer API musi odpowiedzieć specjalnymi nagłówkami HTTP, jak Access-Control-Allow-Origin: https://myapp.com, żeby udzielić zgody.

Dependency Injection

Dependency Injection (DI) to wzorzec projektowy mówiący, jak oddzielić tworzenie obiektów od ich zależności. Oznacza to, że klasa nie odpowiada za tworzenie ani inicjalizację swoich zależności; zamiast tego zależności te dostarcza kod zewnętrzny (którym może być kontener DI). Zaletą jest większa elastyczność kodu, lepsza zrozumiałość i łatwiejsze testowanie aplikacji, bo zależności da się łatwo wymienić i są odizolowane od pozostałych części kodu. Więcej w rozdziale Czym jest Dependency Injection?

Dependency Injection Container

Kontener Dependency Injection (nazywany też kontenerem DI albo kontenerem IoC) to narzędzie zarządzające tworzeniem i administracją zależności (czyli usług) w aplikacji. Kontener ma zwykle konfigurację definiującą, które klasy zależą od innych, jakich konkretnych implementacji zależności użyć i jak te zależności tworzyć. Kontener następnie tworzy te obiekty i udostępnia je klasom, które ich potrzebują. Więcej w rozdziale Czym jest kontener DI?

Escapowanie

Escapowanie to zamiana znaków, które w danym kontekście mają specjalne znaczenie, na inne odpowiadające im sekwencje. Przykład: chcemy zapisać cudzysłowy wewnątrz ciągu ograniczonego cudzysłowami. Ponieważ cudzysłowy mają w kontekście ciągu specjalne znaczenie, a samo ich zapisanie zostałoby zinterpretowane jako koniec ciągu, trzeba zapisać je inną odpowiadającą sekwencją. Dokładną sekwencję określają reguły kontekstu.

Filtr

W szablonach filtr zwykle oznacza funkcję pomagającą zmodyfikować albo przeformatować dane do ostatecznej postaci. Szablony udostępniają szereg standardowych filtrów.

Inwalidacja

Poinformowanie snippetu, żeby się przerysował. W innym kontekście oznacza też usunięcie zawartości cache.

JSON

Format wymiany danych oparty na składni JavaScriptu (jest jej podzbiorem). Dokładną specyfikację znajdziesz na www.json.org.

Komponent

Część aplikacji nadająca się do ponownego użycia. Może to być wizualna część strony, jak opisuje rozdział Pisanie komponentów, albo pojęcie komponentu odnosi się też do klasy Component (taki komponent nie musi być wizualny).

Znaki sterujące

Znaki sterujące to niewidoczne znaki, które mogą pojawić się w tekście i potencjalnie sprawiać problemy. Do masowego usunięcia ich z plików możesz użyć Code Checkera, a do usunięcia ich ze zmiennej funkcji Strings::normalize().

Zdarzenia

Zdarzenie to oczekiwana sytuacja w obiekcie. Gdy nastąpi, wywoływane są tak zwane handlery, czyli callbacki reagujące na zdarzenie (przykład). Zdarzeniem może być na przykład wysłanie formularza, zalogowanie użytkownika itd. Zdarzenia są więc formą Inversion of Control.

Na przykład zalogowanie użytkownika odbywa się w metodzie Nette\Security\User::login(). Obiekt User ma publiczną zmienną $onLoggedIn, będącą tablicą, do której każdy może dodać callback. W momencie, gdy użytkownik się zaloguje, metoda login() wywoła wszystkie callbacki z tablicy. Format nazwy zmiennej onXyz to konwencja używana w całym Nette.

Latte

Jeden z najbardziej zaawansowanych systemów szablonów.

Model

Model to dane, a przede wszystkim funkcjonalny rdzeń całej aplikacji. Zawiera całą logikę aplikacji (używa się też pojęcia logika biznesowa). To MMVC albo MVP. Każda akcja użytkownika (zalogowanie, dodanie towaru do koszyka, zmiana wartości w bazie danych) reprezentuje akcję modelu.

Model zarządza swoim wewnętrznym stanem i oferuje na zewnątrz ustalony interfejs. Wywołując funkcje tego interfejsu, możemy odpytać albo zmienić jego stan. Model nie wie o istnieniu widoku ani kontrolera.

Model-View-Controller

Architektura oprogramowania, która powstała z potrzeby oddzielenia w aplikacjach z interfejsem graficznym kodu obsługi (Controller) od kodu logiki aplikacji (Model) i kodu wyświetlającego dane (View). Czyni to aplikację przejrzystszą, ułatwia dalszy rozwój i pozwala testować poszczególne części osobno.

Model-View-Presenter

Architektura oparta na Model-View-Controller.

Moduł

Moduł reprezentuje logiczną część aplikacji. W typowym układzie jest to grupa presenterów i szablonów obsługujących określony obszar funkcjonalności. Moduły umieszcza się w osobnych katalogach, jak Front/, Admin/ czy Shop/.

Na przykład sklep internetowy można podzielić na:

  • Frontend (Shop/) do przeglądania produktów i zakupów
  • Sekcję klienta (Customer/) do zarządzania zamówieniami
  • Administrację (Admin/) dla operatorów

Technicznie są to zwykłe katalogi, ale dzięki przejrzystemu ustrukturyzowaniu pomagają skalować aplikację. Presenter Admin:Product:List znajdowałby się więc fizycznie na przykład w katalogu app/Presentation/Admin/Product/List/ (patrz mapowanie presenterów).

Namespace

Przestrzeń nazw, część języka PHP od wersji 5.3 i niektórych innych języków programowania, pozwala używać w różnych bibliotekach klas o identycznych nazwach bez kolizji nazw. Patrz dokumentacja PHP.

Presenter

Presenter to obiekt, który przyjmuje żądanie przetłumaczone przez router z żądania HTTP i generuje odpowiedź. Odpowiedzią może być strona HTML, obrazek, dokument XML, plik na dysku, JSON, przekierowanie albo cokolwiek wymyślisz.

Zwykle pojęcie presenter oznacza potomka klasy Nette\Application\UI\Presenter. Na podstawie przychodzących żądań wykonuje odpowiednie akcje i renderuje szablony.

Router

Dwukierunkowy tłumacz między żądaniem HTTP / URL a akcją presentera. Dwukierunkowy oznacza, że z żądania HTTP da się wyprowadzić akcję presentera, a odwrotnie, dla akcji wygenerować odpowiadający URL. Więcej w rozdziale o routingu URL.

Cookies SameSite dają mechanizm rozpoznawania tego, co doprowadziło do wczytania strony. Może mieć trzy wartości: Lax, Strict i None (ta ostatnia wymaga HTTPS). Jeśli żądanie strony przychodzi bezpośrednio z witryny albo użytkownik otwiera stronę, wpisując ją bezpośrednio w pasku adresu czy klikając w zakładkę, przeglądarka wysyła na serwer wszystkie cookies (czyli z flagami Lax, Strict i None). Jeśli użytkownik przejdzie na witrynę odnośnikiem z innej strony, na serwer przekazywane są cookies z flagami Lax i None. Jeśli żądanie powstaje w inny sposób, na przykład przez wysłanie formularza POST z innej strony, wczytanie wewnątrz iframe'a, użycie JavaScriptu itd., wysyłane są tylko cookies z flagą None.

Usługa

W kontekście Dependency Injection usługa oznacza obiekt tworzony i zarządzany przez kontener DI. Usługę da się łatwo zastąpić inną implementacją, na przykład na potrzeby testów albo zmiany zachowania aplikacji, bez potrzeby modyfikowania kodu, który jej używa.

Snippet

Snippet, czyli wycinek strony, który można niezależnie przerysować w trakcie żądania AJAX.

View

Widok to warstwa aplikacji odpowiedzialna za wyświetlenie wyniku żądania. Zwykle używa systemu szablonów i wie, jak wyświetlić konkretne komponenty albo wyniki uzyskane z modelu.

wersja: 4.x