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 M z MVC 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.
Cookie SameSite
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.