Słowniczek pojęć
AJAX
Asynchronous JavaScript and XML – technologia wymiany informacji między klientem a serwerem za pomocą protokołu HTTP bez konieczności ponownego ładowania całej strony przy każdym żądaniu. Chociaż nazwa mogłaby sugerować, że dane są wysyłane tylko w formacie XML, powszechnie używany jest również format JSON.
Akcja presentera
Logiczna część presentera, która wykonuje jedną akcję. Na przykład wyświetla stronę produktu, wylogowuje użytkownika itp. Jeden presenter może mieć wiele akcji.
BOM
Tzw. byte order mark to specjalny pierwszy znak w pliku, który jest używany jako wskaźnik kolejności bajtów w kodowaniu. Niektóre edytory wstawiają go do plików. Jest praktycznie niewidoczny, ale powoduje problemy z wysyłaniem danych wyjściowych i nagłówków z PHP. Do masowego usuwania można użyć Code Checker.
Controller
Kontroler, który przetwarza żądania użytkownika i na ich podstawie wywołuje odpowiednią logikę aplikacji (tj. 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 naruszania stron internetowych wykorzystująca nieprzetworzone dane wyjściowe. Atakujący może wstrzyknąć do strony swój własny kod, co pozwala mu zmodyfikować stronę lub nawet uzyskać poufne dane o odwiedzających. Przed XSS można się bronić tylko poprzez konsekwentne i poprawne przetwarzanie (escapowanie) wszystkich ciągów znaków.
Nette Framework wprowadza rewolucyjną technologię Context-Aware Escaping, która na zawsze uwolni Cię od ryzyka Cross-Site Scriptingu. Wszystkie dane wyjściowe są przetwarzane automatycznie, więc nie może się zdarzyć, że koder o czymś zapomni.
Cross-Site Request Forgery (CSRF)
Atak Cross-Site Request Forgery polega na tym, że atakujący zwabia ofiarę na stronę, która niepostrzeżenie w przeglądarce ofiary wykonuje żądanie do serwera, na którym ofiara jest zalogowana, a serwer zakłada, że żądanie zostało wykonane przez ofiarę z własnej woli. W ten sposób pod tożsamością ofiary wykonuje określoną czynność, o której ofiara nie wie. Może to być zmiana lub usunięcie danych, wysłanie wiadomości itp.
Nette Framework automatycznie chroni formularze i sygnały w prezenterach przed tego typu atakami. Robi to, uniemożliwiając ich wysłanie lub wywołanie z innej domeny.
Dependency Injection
Dependency Injection (DI) to wzorzec projektowy, który określa, jak oddzielić tworzenie obiektów od ich zależności. Oznacza to, że klasa nie jest odpowiedzialna za tworzenie ani inicjalizację swoich zależności, ale zamiast tego zależności te są dostarczane przez kod zewnętrzny (może to być również kontener DI). Zaletą jest to, że pozwala na większą elastyczność kodu, lepszą czytelność i łatwiejsze testowanie aplikacji, ponieważ zależności są łatwo zastępowalne i izolowane od pozostałych części kodu. Więcej w rozdziale Co to jest Dependency Injection?
Kontener Dependency Injection
Kontener Dependency Injection (także kontener DI lub kontener IoC) to narzędzie, które zajmuje się tworzeniem i zarządzaniem zależnościami w aplikacji (czyli usługami). Kontener zazwyczaj ma konfigurację, która definiuje, które klasy są zależne od innych klas, jakie konkretne implementacje zależności mają być użyte i jak te zależności mają być tworzone. Następnie kontener tworzy te obiekty i dostarcza je klasom, które ich potrzebują. Więcej w rozdziale Co to jest kontener DI?
Escapowanie
Escapowanie to konwersja znaków mających w danym kontekście specjalne znaczenie na inne odpowiadające sekwencje. Przykład: do ciągu ograniczonego cudzysłowami chcemy zapisać cudzysłów. Ponieważ cudzysłów ma w kontekście ciągu specjalne znaczenie i jego proste zapisanie byłoby rozumiane jako zakończenie ciągu, należy go zapisać inną odpowiadającą sekwencją. Jaką dokładnie, określają reguły kontekstu.
Filtr (wcześniej helper)
W szablonach pod pojęciem filtr zwykle rozumie się funkcję, która pomaga zmodyfikować lub przeformatować dane do ostatecznej postaci. Szablony dysponują kilkoma standardowymi filtrami.
Unieważnienie (Invalidation)
Powiadomienie snippetu, aby się przerysował. W innym znaczeniu także usunięcie zawartości cache.
JSON
Format wymiany danych oparty na składni JavaScript (jest jej podzbiorem). Dokładną specyfikację znajdziesz na stronie www.json.org.
Komponent
Reużywalna część aplikacji. Może to być wizualna część strony, jak opisuje rozdział Pisanie komponentów, lub pod pojęciem komponent rozumie się także klasę Component (taki komponent nie musi być wizualny).
Znaki kontrolne
Znaki kontrolne to niewidoczne znaki, które mogą występować w tekście i ewentualnie powodować problemy. Do ich masowego usuwania z plików możesz użyć Code Checker, a do usuwania ze zmiennej funkcji Strings::normalize().
Eventy (zdarzenia)
Zdarzenie to oczekiwana sytuacja w obiekcie, która gdy nastąpi, wywoływane są tzw. handlery, czyli callbacki reagujące na zdarzenie (przykład). Zdarzeniem może być np. wysłanie formularza, zalogowanie użytkownika itp. Zdarzenia są więc formą Inversion of Control.
Na przykład do zalogowania użytkownika dochodzi w metodzie Nette\Security\User::login()
. Obiekt
User
ma publiczną zmienną $onLoggedIn
, która jest tablicą, do której każdy może dodać callback.
W momencie, gdy użytkownik się zaloguje, metoda login()
wywołuje wszystkie callbacki w tablicy. Nazwa zmiennej w
formacie onXyz
jest konwencją używaną w całym Nette.
Latte
Jeden z najbardziej zaawansowanych systemów szablonów.
Model
Model to dane i przede wszystkim funkcjonalna podstawa całej aplikacji. Zawiera całą logikę aplikacji (używa się również terminu logika biznesowa). Jest to M z MVC lub MVP. Każda akcja użytkownika (logowanie, dodanie towaru do koszyka, zmiana wartości w bazie danych) stanowi akcję modelu.
Model zarządza swoim wewnętrznym stanem i na zewnątrz oferuje ściśle określony interfejs. Wywołując funkcje tego interfejsu, możemy sprawdzać lub zmieniać jego stan. Model nie wie o istnieniu view lub kontrolera.
Model-View-Controller (MVC)
Architektura oprogramowania, która powstała z potrzeby oddzielenia w aplikacjach z interfejsem graficznym kodu obsługi (controller) od kodu logiki aplikacji (model) i od kodu wyświetlającego dane (view). Dzięki temu aplikacja staje się bardziej przejrzysta, ułatwia przyszły rozwój i umożliwia testowanie poszczególnych części osobno.
Model-View-Presenter (MVP)
Architektura oparta na Model-View-Controller.
Moduł
Moduł reprezentuje logiczną część aplikacji. W typowym układzie jest to grupa prezenterów i szablonów, które
obsługują określoną dziedzinę funkcjonalności. Moduły umieszczamy w osobnych katalogach, takich jak np.
Front/
, Admin/
lub Shop/
.
Na przykład e-sklep dzielimy na:
- Frontend (
Shop/
) do przeglądania produktów i zakupów - Sekcję klienta (
Customer/
) do zarządzania zamówieniami - Administrację (
Admin/
) dla operatora
Technicznie są to zwykłe katalogi, które jednak dzięki przejrzystemu podziałowi pomagają skalować aplikację. Prezenter
Admin:Product:List
będzie fizycznie umieszczony na przykład w katalogu
app/Presentation/Admin/Product/List/
(zobacz mapowanie prezenterów).
Namespace
Przestrzeń nazw, część języka PHP od wersji 5.3 i niektórych innych języków programowania, umożliwiająca używanie klas, które w różnych bibliotekach nazywają się tak samo, bez konfliktu nazw. Zobacz dokumentację 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 lub cokolwiek wymyślisz.
Zwykle pod pojęciem presenter rozumie się potomka klasy Nette\Application\UI\Presenter. Zgodnie z przychodzącymi żądaniami uruchamia odpowiednie akcje i renderuje szablony.
Router
Dwukierunkowy tłumacz między żądaniem HTTP / URL a akcją presentera. Dwukierunkowość oznacza, że z żądania HTTP można wywnioskować akcję presentera, ale także odwrotnie, do akcji wygenerować odpowiedni URL. Więcej w rozdziale o routingu URL.
SameSite cookie
SameSite cookies zapewniają mechanizm rozpoznawania, co doprowadziło do załadowania strony. Może mieć trzy wartości:
Lax
, Strict
i None
(ten wymaga HTTPS). Jeśli żądanie strony pochodzi bezpośrednio ze
strony internetowej lub użytkownik otwiera stronę, wpisując ją bezpośrednio w pasku adresu lub klikając zakładkę,
przeglądarka wysyła do serwera wszystkie pliki cookie (czyli z flagami Lax
, Strict
i
None
). Jeśli użytkownik przejdzie na stronę przez link z innej strony, do serwera zostaną przekazane pliki
cookie z flagami Lax
i None
. Jeśli żądanie powstanie w inny sposób, np. przez wysłanie formularza
POST z innej strony, załadowanie wewnątrz iframe, za pomocą JavaScriptu itp., wysłane zostaną tylko pliki cookie z flagą
None
.
Usługa / Serwis
W kontekście Dependency Injection jako usługa określa się obiekt, który jest tworzony i zarządzany przez kontener DI. Usługa może być łatwo zastąpiona inną implementacją, na przykład w celach testowania lub zmiany zachowania aplikacji, bez konieczności modyfikowania kodu, który używa usługi.
Snippet
Wycinek, część strony, którą można osobno przerysować podczas żądania AJAX.
View
View, czyli widok, to warstwa aplikacji odpowiedzialna za wyświetlenie wyniku żądania. Zwykle używa systemu szablonów i wie, jak wyświetlić dany komponent lub wynik uzyskany z modelu.