Glossar der Begriffe
AJAX
Asynchronous JavaScript and XML – eine Technologie zum Austausch von Informationen zwischen Client und Server über das HTTP-Protokoll, ohne dass bei jedem Request die gesamte Seite neu geladen werden muss. Auch wenn der Name nahelegt, dass die Daten nur im XML-Format gesendet werden, wird ebenso häufig das Format JSON verwendet.
Presenter-Aktion
Ein logischer Teil eines Presenters, der eine einzelne Aktion ausführt. Zum Beispiel die Anzeige einer Produktseite, das Abmelden eines Benutzers usw. Ein einzelner Presenter kann mehrere Aktionen haben.
BOM
Das byte order mark ist ein spezielles erstes Zeichen in einer Datei, das als Kennzeichen der Bytereihenfolge in einer Kodierung dient. Manche Editoren fügen es in Dateien ein. Es ist praktisch unsichtbar, verursacht aber Probleme beim Senden von Ausgaben und Headern aus PHP. Zum Entfernen in großem Umfang können Sie den Code Checker verwenden.
Controller
Ein Controller verarbeitet die Anfragen des Benutzers und ruft auf ihrer Grundlage die passende Anwendungslogik auf (also das Model) und bittet dann den View, die Daten darzustellen. Das Äquivalent der Controller im Nette Framework sind die Presenter.
Cross-Site Scripting (XSS)
Cross-Site Scripting ist eine Methode, Websites durch das Ausnutzen nicht escapter Ausgaben zu stören. Ein Angreifer kann dann eigenen Code in die Seite einschleusen und dadurch die Seite verändern oder sogar sensible Daten der Besucher erlangen. Der Schutz vor XSS besteht im konsequenten und korrekten Escaping aller ausgegebenen Strings.
Das Nette Framework führt die revolutionäre Technologie Context-Aware Escaping ein, die das Risiko von Cross-Site Scripting dauerhaft beseitigt. Sie escapt alle Ausgaben automatisch, sodass ein Entwickler nichts vergessen kann.
Cross-Site Request Forgery (CSRF)
Bei einem Angriff vom Typ Cross-Site Request Forgery lockt der Angreifer ein Opfer auf eine Seite, die unauffällig im Browser des Opfers einen Request an einen Server ausführt, bei dem das Opfer angemeldet ist. Der Server glaubt, der Request sei vom Opfer gewollt gestellt worden. Unter der Identität des Opfers führt er also ohne dessen Wissen eine Aktion aus. Das kann das Ändern oder Löschen von Daten, das Senden einer Nachricht usw. sein.
Das Nette Framework schützt Formulare und Signale in Presentern automatisch vor dieser Art von Angriff, indem es verhindert, dass sie von einer anderen Domain abgeschickt oder ausgelöst werden.
Cross-Origin Resource Sharing (CORS)
CORS ist ein Sicherheitsmechanismus, der es einer Webseite erlaubt, per JavaScript Requests an eine andere Domain zu stellen als die, von der die Seite geladen wurde. Ohne CORS blockieren Browser solche Requests aus Sicherheitsgründen.
Läuft Ihre Website zum Beispiel unter https://myapp.com und versucht, per JavaScript (AJAX, Fetch API) Daten von
https://api.example.com zu laden, prüft der Browser, ob der API-Server diesen Cross-Origin-Request erlaubt. Der
API-Server muss mit speziellen HTTP-Headern antworten, etwa Access-Control-Allow-Origin: https://myapp.com, um die
Erlaubnis zu erteilen.
Dependency Injection
Dependency Injection (DI) ist ein Entwurfsmuster, das vorgibt, wie man das Erzeugen von Objekten von ihren Abhängigkeiten trennt. Das heißt, eine Klasse ist nicht dafür zuständig, ihre Abhängigkeiten zu erzeugen oder zu initialisieren; stattdessen werden diese Abhängigkeiten von außenstehendem Code bereitgestellt (das kann ein DI-Container sein). Der Vorteil liegt in größerer Flexibilität des Codes, besserer Verständlichkeit und leichterer Testbarkeit der Anwendung, denn die Abhängigkeiten lassen sich leicht ersetzen und sind von den übrigen Teilen des Codes isoliert. Mehr im Kapitel Was ist Dependency Injection?
Dependency Injection Container
Ein Dependency-Injection-Container (auch DI-Container oder IoC-Container) ist ein Werkzeug, das das Erzeugen und Verwalten von Abhängigkeiten (bzw. Services) innerhalb einer Anwendung übernimmt. Der Container hat üblicherweise eine Konfiguration, die festlegt, welche Klassen von welchen abhängen, welche konkreten Implementierungen der Abhängigkeiten verwendet werden sollen und wie diese Abhängigkeiten erzeugt werden. Der Container erzeugt diese Objekte dann und stellt sie den Klassen bereit, die sie brauchen. Mehr im Kapitel Was ist ein DI-Container?
Escaping
Escaping ist die Umwandlung von Zeichen, die in einem bestimmten Kontext eine besondere Bedeutung haben, in andere, entsprechende Sequenzen. Beispiel: Wir wollen innerhalb eines von Anführungszeichen umschlossenen Strings Anführungszeichen schreiben. Da Anführungszeichen im Kontext des Strings eine besondere Bedeutung haben und ihr bloßes Hinschreiben als Ende des Strings interpretiert würde, müssen sie mit einer anderen, entsprechenden Sequenz geschrieben werden. Die genaue Sequenz bestimmen die Regeln des Kontexts.
Filter
In Templates bezeichnet ein Filter üblicherweise eine Funktion, die dabei hilft, Daten in ihre endgültige Form zu bringen oder umzuformatieren. Templates bieten mehrere Standardfilter.
Invalidierung
Die Benachrichtigung eines Snippets, sich neu zu zeichnen. In einem anderen Kontext bedeutet es auch das Löschen des Cache-Inhalts.
JSON
Ein Datenaustauschformat, das auf der Syntax von JavaScript beruht (es ist eine Teilmenge davon). Die genaue Spezifikation finden Sie unter www.json.org.
Komponente
Ein wiederverwendbarer Teil einer Anwendung. Das kann ein sichtbarer Teil einer Seite sein, wie im Kapitel Komponenten schreiben beschrieben, oder der Begriff Komponente bezeichnet auch die Klasse Component (eine solche Komponente muss nicht sichtbar sein).
Steuerzeichen
Steuerzeichen sind unsichtbare Zeichen, die in Texten auftauchen und Probleme verursachen können. Um sie in großem Umfang aus Dateien zu entfernen, können Sie den Code Checker verwenden, und um sie aus einer Variablen zu entfernen, die Funktion Strings::normalize().
Events
Ein Event ist eine erwartete Situation innerhalb eines Objekts. Tritt sie ein, werden die sogenannten Handler aufgerufen, also Callbacks, die auf das Event reagieren (Beispiel). Ein Event kann zum Beispiel das Absenden eines Formulars, die Anmeldung eines Benutzers usw. sein. Events sind also eine Form von Inversion of Control.
Die Anmeldung eines Benutzers findet zum Beispiel in der Methode Nette\Security\User::login() statt. Das Objekt
User hat eine öffentliche Variable $onLoggedIn, ein Array, dem jeder einen Callback hinzufügen kann.
Sobald sich der Benutzer anmeldet, ruft die Methode login() alle Callbacks im Array auf. Die Namensform
onXyz ist eine Konvention, die in ganz Nette verwendet wird.
Latte
Eines der fortschrittlichsten Templating-Systeme.
Model
Das Model sind die Daten und vor allem der funktionale Kern der gesamten Anwendung. Es enthält die gesamte Anwendungslogik (man spricht auch von Geschäftslogik). Es ist das M in MVC oder MVP. Jede Aktion des Benutzers (Anmelden, Hinzufügen einer Ware zum Warenkorb, Ändern eines Werts in der Datenbank) stellt eine Aktion des Models dar.
Das Model verwaltet seinen inneren Zustand und bietet nach außen eine feste Schnittstelle. Durch den Aufruf von Funktionen dieser Schnittstelle können wir seinen Zustand abfragen oder ändern. Das Model weiß nichts von der Existenz des View oder des Controller.
Model-View-Controller
Eine Softwarearchitektur, die aus dem Bedürfnis entstand, bei Anwendungen mit grafischer Oberfläche den Code für die Steuerung (Controller) vom Code der Anwendungslogik (Model) und vom Code für die Darstellung der Daten (View) zu trennen. Das macht die Anwendung übersichtlicher, erleichtert die künftige Entwicklung und erlaubt es, die einzelnen Teile getrennt zu testen.
Model-View-Presenter
Eine Architektur, die auf Model-View-Controller beruht.
Modul
Ein Modul stellt einen logischen Teil einer Anwendung dar. In der typischen Anordnung ist es eine Gruppe von Presentern und
Templates, die einen bestimmten Funktionsbereich abdecken. Module werden in eigenen Verzeichnissen abgelegt, etwa
Front/, Admin/ oder Shop/.
Ein E-Shop lässt sich zum Beispiel aufteilen in:
- Frontend (
Shop/) zum Durchsehen der Produkte und zum Kauf - Kundenbereich (
Customer/) zur Verwaltung der Bestellungen - Administration (
Admin/) für die Betreiber
Technisch sind das gewöhnliche Verzeichnisse, aber dank der klaren Strukturierung helfen sie dabei, die Anwendung zu
skalieren. Der Presenter Admin:Product:List läge also physisch zum Beispiel im Verzeichnis
app/Presentation/Admin/Product/List/ (siehe Mapping der Presenter).
Namespace
Ein Namensraum, seit Version 5.3 Teil der Sprache PHP und einiger anderer Programmiersprachen, erlaubt die Verwendung gleich benannter Klassen aus verschiedenen Bibliotheken ohne Namenskollisionen. Siehe die PHP-Dokumentation.
Presenter
Ein Presenter ist ein Objekt, das einen vom Router aus einem HTTP-Request übersetzten Request entgegennimmt und eine Response erzeugt. Die Response kann eine HTML-Seite, ein Bild, ein XML-Dokument, eine Datei auf der Festplatte, JSON, eine Weiterleitung oder alles sein, was Sie sich ausdenken.
Üblicherweise bezeichnet der Begriff Presenter einen Nachkommen der Klasse Nette\Application\UI\Presenter. Anhand der eingehenden Requests führt er die entsprechenden Aktionen aus und rendert Templates.
Router
Ein bidirektionaler Übersetzer zwischen einem HTTP-Request bzw. einer URL und einer Presenter-Aktion. Bidirektional heißt, dass sich aus einem HTTP-Request eine Presenter-Aktion ableiten lässt und umgekehrt zu einer Aktion die passende URL erzeugt werden kann. Mehr im Kapitel über das Routing der URLs.
SameSite-Cookie
SameSite-Cookies bieten einen Mechanismus, um zu erkennen, was zum Laden der Seite geführt hat. Sie können drei Werte haben:
Lax, Strict und None (letzterer verlangt HTTPS). Kommt der Request für die Seite direkt
von der Website oder öffnet der Benutzer die Seite durch direkte Eingabe in die Adresszeile oder durch Klick auf ein Lesezeichen,
sendet der Browser alle Cookies an den Server (also mit den Flags Lax, Strict und None).
Klickt sich der Benutzer über einen Link auf einer anderen Site zur Website durch, werden Cookies mit den Flags Lax
und None an den Server übergeben. Entsteht der Request auf andere Weise, etwa durch das Absenden eines
POST-Formulars von einer anderen Site, das Laden in einem iframe, die Verwendung von JavaScript usw., werden nur Cookies mit dem
Flag None gesendet.
Service
Im Kontext von Dependency Injection bezeichnet ein Service ein Objekt, das vom DI-Container erzeugt und verwaltet wird. Ein Service lässt sich leicht durch eine andere Implementierung ersetzen, zum Beispiel zu Testzwecken oder um das Verhalten der Anwendung zu ändern, ohne dass der Code geändert werden muss, der den Service verwendet.
Snippet
Ein Snippet, ein Teil einer Seite, der sich während eines AJAX-Requests unabhängig neu zeichnen lässt.
View
Der View ist die Schicht der Anwendung, die für die Darstellung des Ergebnisses eines Requests zuständig ist. Sie verwendet üblicherweise ein Templating-System und weiß, wie sie bestimmte Komponenten oder vom Model erhaltene Ergebnisse darstellt.