Glossar
AJAX
Asynchronous JavaScript and XML – Technologie zum Informationsaustausch zwischen Client und Server über das HTTP-Protokoll, ohne dass die gesamte Seite bei jeder Anfrage neu geladen werden muss. Obwohl der Name vermuten lässt, dass Daten nur im XML-Format gesendet werden, wird häufig auch das Format JSON verwendet.
Presenter-Aktion
Logischer Teil des Presenters, der eine Aktion ausführt. Zum Beispiel zeigt er die Produktseite an, meldet den Benutzer ab usw. Ein Presenter kann mehrere Aktionen haben.
BOM
Die sogenannte Byte Order Mark ist ein spezielles erstes Zeichen in einer Datei, das als Indikator für die Byte-Reihenfolge in der Kodierung verwendet wird. Einige Editoren fügen es in Dateien ein. Es ist praktisch unsichtbar, verursacht aber Probleme beim Senden der Ausgabe und der Header von PHP. Zur Massenentfernung können Sie den Code Checker verwenden.
Controller
Ein Controller, der Benutzeranfragen verarbeitet und auf deren Grundlage die entsprechende Anwendungslogik (d.h. das model) aufruft und dann die view auffordert, Daten zu rendern. Ein Äquivalent zu Controllern im Nette Framework sind Presenter.
Cross-Site Scripting (XSS)
Cross-Site Scripting ist eine Methode zum Kompromittieren von Webseiten durch Ausnutzung unbehandelter Ausgaben. Der Angreifer kann dann eigenen Code in die Seite einschleusen und dadurch die Seite verändern oder sogar sensible Daten von Besuchern erhalten. Gegen XSS kann man sich nur durch konsequente und korrekte Behandlung aller Zeichenketten schützen.
Das Nette Framework kommt mit einer revolutionären Technologie Context-Aware Escaping, die Sie für immer vom Risiko des Cross-Site Scriptings befreit. Alle Ausgaben werden nämlich automatisch behandelt, und so kann es nicht passieren, dass ein Programmierer etwas vergisst.
Cross-Site Request Forgery (CSRF)
Der Cross-Site Request Forgery Angriff besteht darin, dass der Angreifer das Opfer auf eine Seite lockt, die unauffällig im Browser des Opfers eine Anfrage an den Server ausführt, auf dem das Opfer angemeldet ist, und der Server annimmt, dass die Anfrage vom Opfer freiwillig ausgeführt wurde. Und so führt er unter der Identität des Opfers eine bestimmte Aktion aus, ohne dass es davon weiß. Es kann sich um eine Änderung oder Löschung von Daten, das Senden einer Nachricht usw. handeln.
Das Nette Framework schützt automatisch Formulare und Signale in Presentern vor dieser Art von Angriff. Und zwar dadurch, dass es deren Senden oder Aufrufen von einer anderen Domain verhindert.
Dependency Injection
Dependency Injection (DI) ist ein Entwurfsmuster, das beschreibt, wie man die Erstellung von Objekten von ihren Abhängigkeiten trennt. Das heißt, dass die Klasse nicht für die Erstellung oder Initialisierung ihrer Abhängigkeiten verantwortlich ist, sondern diese Abhängigkeiten stattdessen von externem Code (dies kann auch ein DI-Container sein) bereitgestellt werden. Der Vorteil besteht darin, dass es eine größere Code-Flexibilität, bessere Verständlichkeit und einfacheres Testen der Anwendung ermöglicht, da Abhängigkeiten leicht austauschbar und von anderen Teilen des Codes isoliert sind. Mehr im Kapitel Was ist Dependency Injection?
Dependency Injection Container
Ein Dependency Injection Container (auch DI-Container oder IoC-Container) ist ein Werkzeug, das die Erstellung und Verwaltung von Abhängigkeiten in der Anwendung (oder Diensten) übernimmt. Der Container hat meistens eine Konfiguration, die definiert, welche Klassen von anderen Klassen abhängen, welche konkreten Implementierungen von Abhängigkeiten verwendet werden sollen und wie diese Abhängigkeiten erstellt werden sollen. Danach erstellt der Container diese Objekte und stellt sie den Klassen zur Verfügung, die sie benötigen. Mehr im Kapitel Was ist ein DI-Container?
Escaping
Escaping ist die Umwandlung von Zeichen, die in einem gegebenen Kontext eine besondere Bedeutung haben, in andere entsprechende Sequenzen. Beispiel: In eine von Anführungszeichen begrenzte Zeichenkette möchten wir Anführungszeichen schreiben. Da Anführungszeichen im Kontext der Zeichenkette eine besondere Bedeutung haben und ihre einfache Notation als Ende der Zeichenkette verstanden werden würde, ist es notwendig, sie durch eine andere entsprechende Sequenz zu schreiben. Welche genau, bestimmen die Regeln des Kontexts.
Filter (früher Helper)
In Templates versteht man unter dem Begriff Filter üblicherweise eine Funktion, die hilft, Daten in die endgültige Form zu ändern oder neu zu formatieren. Templates verfügen über mehrere Standardfilter.
Invalidierung
Benachrichtigung des Snippets, damit es neu gezeichnet wird. In einer anderen Bedeutung auch das Löschen des Cache-Inhalts.
JSON
Format für den Datenaustausch, basierend auf der JavaScript-Syntax (ist eine Teilmenge davon). Die genaue Spezifikation finden Sie auf der Seite www.json.org.
Komponente
Wiederverwendbarer Teil der Anwendung. Es kann ein visueller Teil der Seite sein, wie im Kapitel Komponenten schreiben beschrieben, oder unter dem Begriff Komponente versteht man auch die Klasse Component (eine solche Komponente muss nicht visuell sein).
Steuerzeichen
Steuerzeichen sind unsichtbare Zeichen, die im Text vorkommen und möglicherweise auch Probleme verursachen können. Zur Massenentfernung aus Dateien können Sie den Code Checker verwenden und zur Entfernung aus einer Variablen die Funktion Strings::normalize().
Events (Ereignisse)
Ein Ereignis ist eine erwartete Situation in einem Objekt, bei deren Eintreten sogenannte Handler aufgerufen werden, also Callbacks, die auf das Ereignis reagieren (Beispiel). Ein Ereignis kann zum Beispiel das Senden eines Formulars, die Benutzeranmeldung usw. sein. Ereignisse sind somit eine Form der Inversion of Control.
Zum Beispiel erfolgt die Benutzeranmeldung in der Methode Nette\Security\User::login()
. Das
User
-Objekt hat eine öffentliche Variable $onLoggedIn
, ein Array, zu dem jeder einen Callback
hinzufügen kann. In dem Moment, in dem sich der Benutzer anmeldet, ruft die login()
-Methode alle Callbacks im Array
auf. Der Variablenname in der Form onXyz
ist eine Konvention, die in ganz Nette verwendet wird.
Latte
Eines der fortschrittlichsten Template-Systeme.
Model
Das Model ist die Daten- und insbesondere Funktionsgrundlage der gesamten Anwendung. Es enthält die gesamte Anwendungslogik (der Begriff Geschäftslogik wird ebenfalls verwendet). Es ist das M aus MVC oder MVP. Jede Benutzeraktion (Anmeldung, Hinzufügen von Waren zum Warenkorb, Änderung eines Wertes in der Datenbank) stellt eine Aktion des Modells dar.
Das Model verwaltet seinen internen Zustand und bietet nach außen eine feste Schnittstelle an. Durch Aufrufen der Funktionen dieser Schnittstelle können wir seinen Zustand abfragen oder ändern. Das Model weiß nichts von der Existenz der view oder des Controllers.
Model-View-Controller
Softwarearchitektur, die aus der Notwendigkeit entstand, bei Anwendungen mit grafischer Benutzeroberfläche den Bedienungscode (controller) vom Code der Anwendungslogik (model) und vom Code, der Daten anzeigt (view), zu trennen. Dadurch wird die Anwendung übersichtlicher, erleichtert die zukünftige Entwicklung und ermöglicht das separate Testen einzelner Teile.
Model-View-Presenter
Architektur, basierend auf Model-View-Controller.
Modul
Ein Modul stellt einen logischen Teil der Anwendung dar. In einer typischen Anordnung handelt es sich um eine Gruppe von
Presentern und Templates, die einen bestimmten Funktionsbereich abdecken. Module platzieren wir in separaten Verzeichnissen, wie z.B.
Front/
, Admin/
oder Shop/
.
Zum Beispiel teilen wir einen E-Shop auf in:
- Frontend (
Shop/
) zum Durchsuchen von Produkten und zum Einkaufen - Kundenbereich (
Customer/
) zur Verwaltung von Bestellungen - Administration (
Admin/
) für den Betreiber
Technisch gesehen handelt es sich um gewöhnliche Verzeichnisse, die aber dank klarer Gliederung helfen, die Anwendung zu
skalieren. Der Presenter Admin:Product:List
wird also physisch zum Beispiel im Verzeichnis
app/Presentation/Admin/Product/List/
platziert (siehe Presenter-Mapping).
Namespace
Namensraum, Teil der PHP-Sprache seit Version 5.3 und einiger anderer Programmiersprachen, ermöglicht die Verwendung von Klassen, die in verschiedenen Bibliotheken gleich benannt sind, ohne dass es zu Namenskollisionen kommt. Siehe PHP-Dokumentation.
Presenter
Ein Presenter ist ein Objekt, das die Anfrage, die vom Router aus der HTTP-Anfrage übersetzt wurde, entgegennimmt und eine Antwort generiert. Die Antwort kann eine HTML-Seite, ein Bild, ein XML-Dokument, eine Datei auf der Festplatte, JSON, eine Weiterleitung oder was auch immer Sie sich ausdenken sein.
Üblicherweise versteht man unter dem Begriff Presenter eine Unterklasse der Klasse Nette\Application\UI\Presenter. Entsprechend den eingehenden Anfragen startet er entsprechende Aktionen und rendert Templates.
Router
Bidirektionaler Übersetzer zwischen HTTP-Anfrage / URL und der Presenter-Aktion. Bidirektional bedeutet, dass aus der HTTP-Anfrage die Presenter-Aktion abgeleitet werden kann, aber auch umgekehrt zur Aktion die entsprechende URL generiert werden kann. Mehr im Kapitel über URL-Routing.
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
(dieser erfordert HTTPS). Wenn die Anfrage für die Seite direkt von
der Website kommt oder der Benutzer die Seite durch direkte Eingabe in die Adresszeile oder durch Klicken auf ein Lesezeichen
öffnet, sendet der Browser alle Cookies an den Server (also mit den Flags Lax
, Strict
und
None
). Wenn der Benutzer über einen Link von einer anderen Website auf die Website klickt, werden Cookies mit den
Flags Lax
und None
an den Server übergeben. Wenn die Anfrage auf andere Weise entsteht, wie das Senden
eines POST-Formulars von einer anderen Website, Laden innerhalb eines Iframes, mittels JavaScript usw., werden nur Cookies mit dem
Flag None
gesendet.
Dienst
Im Kontext von Dependency Injection wird als Dienst ein Objekt bezeichnet, das vom DI-Container erstellt und verwaltet wird. Ein Dienst kann leicht durch eine andere Implementierung ersetzt werden, zum Beispiel zu Testzwecken oder zur Änderung des Anwendungsverhaltens, ohne dass der Code geändert werden muss, der den Dienst verwendet.
Snippet
Ausschnitt, Teil der Seite, der separat während einer AJAX-Anfrage neu gezeichnet werden kann.
View
Die View, also die Ansicht, ist die Schicht der Anwendung, die für die Anzeige des Ergebnisses der Anfrage verantwortlich ist. Normalerweise verwendet sie ein Template-System und weiß, wie die jeweilige Komponente oder das vom Modell erhaltene Ergebnis angezeigt werden soll.