Glossaire des termes
AJAX
Asynchronous JavaScript and XML – une technologie d'échange d'informations entre le client et le serveur via le protocole HTTP, sans avoir besoin de recharger toute la page à chaque requête. Même si le nom peut laisser croire que les données ne sont envoyées qu'au format XML, le format JSON est lui aussi couramment utilisé.
Action de presenter
Partie logique d'un presenter qui effectue une seule action. Par exemple afficher la page d'un produit, déconnecter un utilisateur, etc. Un même presenter peut avoir plusieurs actions.
BOM
Le byte order mark est un premier caractère particulier dans un fichier, servant d'indicateur de l'ordre des octets dans l'encodage. Certains éditeurs l'insèrent dans les fichiers. Il est pratiquement invisible, mais provoque des problèmes lors de l'envoi de la sortie et des en-têtes depuis PHP. Vous pouvez utiliser Code Checker pour le supprimer en masse.
Controller
Un contrôleur qui traite les requêtes de l'utilisateur et, sur cette base, appelle la logique applicative appropriée (c'est-à-dire le Model), puis demande à la View de rendre les données. L'équivalent des contrôleurs dans Nette Framework, ce sont les presenters.
Cross-Site Scripting (XSS)
Le Cross-Site Scripting est une méthode de perturbation des sites web qui exploite des sorties non échappées. Un attaquant peut alors injecter son propre code dans la page et ainsi la modifier, voire obtenir des données sensibles sur les visiteurs. La protection contre le XSS consiste à échapper systématiquement et correctement toutes les chaînes affichées.
Nette Framework introduit la technologie révolutionnaire de l'échappement contextuel, qui élimine définitivement le risque de Cross-Site Scripting. Elle échappe automatiquement toutes les sorties, si bien qu'un développeur ne peut rien oublier.
Cross-Site Request Forgery (CSRF)
Une attaque Cross-Site Request Forgery consiste, pour l'attaquant, à attirer la victime sur une page qui exécute discrètement, depuis son navigateur, une requête vers un serveur sur lequel elle est connectée. Le serveur croit que la requête a été faite volontairement par la victime. Sous l'identité de celle-ci, il effectue donc une action à son insu. Cela peut être la modification ou la suppression de données, l'envoi d'un message, etc.
Nette Framework protège automatiquement les formulaires et les signaux des presenters contre ce type d'attaque en empêchant qu'ils soient envoyés ou déclenchés depuis un autre domaine.
Cross-Origin Resource Sharing (CORS)
Le CORS est un mécanisme de sécurité qui permet à une page web d'émettre en JavaScript des requêtes vers un domaine différent de celui depuis lequel la page a été chargée. Sans CORS, les navigateurs bloquent de telles requêtes pour des raisons de sécurité.
Par exemple, si votre site tourne sur https://myapp.com et essaie de récupérer des données depuis
https://api.example.com en JavaScript (AJAX, Fetch API), le navigateur vérifiera si le serveur d'API autorise cette
requête cross-origin. Le serveur d'API doit répondre avec des en-têtes HTTP particuliers, comme
Access-Control-Allow-Origin: https://myapp.com, pour donner son accord.
Dependency Injection
L'injection de dépendances (DI) est un patron de conception qui indique comment séparer la création des objets de leurs dépendances. Cela signifie qu'une classe n'est pas chargée de créer ni d'initialiser ses dépendances ; celles-ci lui sont fournies par du code externe (qui peut être un conteneur DI). L'avantage réside dans une plus grande souplesse du code, une meilleure compréhensibilité et des tests d'application plus faciles, car les dépendances sont aisément remplaçables et isolées des autres parties du code. Plus d'informations dans le chapitre Qu'est-ce que l'injection de dépendances ?
Dependency Injection Container
Un conteneur d'injection de dépendances (aussi conteneur DI ou conteneur IoC) est un outil qui gère la création et l'administration des dépendances (ou services) au sein d'une application. Le conteneur possède généralement une configuration définissant quelles classes dépendent d'autres, quelles implémentations concrètes des dépendances doivent être utilisées et comment ces dépendances doivent être créées. Le conteneur crée ensuite ces objets et les fournit aux classes qui en ont besoin. Plus d'informations dans le chapitre Qu'est-ce qu'un conteneur DI ?
Échappement
L'échappement est la conversion des caractères ayant une signification particulière dans un contexte donné en d'autres séquences correspondantes. Exemple : nous voulons écrire des guillemets à l'intérieur d'une chaîne délimitée par des guillemets. Comme les guillemets ont une signification particulière dans le contexte de la chaîne et que les écrire simplement serait interprété comme la fin de la chaîne, il faut les écrire à l'aide d'une autre séquence correspondante. La séquence exacte est déterminée par les règles du contexte.
Filtre
Dans les templates, un filtre désigne généralement une fonction qui aide à modifier ou à reformater les données pour leur donner leur forme finale. Les templates fournissent plusieurs filtres standards.
Invalidation
Le fait de signaler à un Snippet qu'il doit se redessiner. Dans un autre contexte, cela signifie aussi supprimer le contenu du cache.
JSON
Un format d'échange de données fondé sur la syntaxe de JavaScript (il en est un sous-ensemble). La spécification exacte se trouve sur www.json.org.
Composant
Partie réutilisable d'une application. Il peut s'agir d'une partie visuelle de la page, comme décrit dans le chapitre Écrire des composants, mais le terme composant désigne aussi la classe Component (un tel composant n'est pas nécessairement visuel).
Caractères de contrôle
Les caractères de contrôle sont des caractères invisibles qui peuvent apparaître dans un texte et provoquer des problèmes. Pour les supprimer en masse des fichiers, vous pouvez utiliser Code Checker et, pour les supprimer d'une variable, la fonction Strings::normalize().
Événements
Un événement est une situation attendue au sein d'un objet. Lorsqu'elle survient, ce qu'on appelle des handlers sont appelés, c'est-à-dire des callbacks réagissant à l'événement (exemple). Un événement peut être, par exemple, l'envoi d'un formulaire, la connexion d'un utilisateur, etc. Les événements sont donc une forme d'Inversion of Control.
Par exemple, la connexion de l'utilisateur a lieu dans la méthode Nette\Security\User::login(). L'objet
User possède une variable publique $onLoggedIn, qui est un tableau auquel n'importe qui peut ajouter un
callback. Lorsque l'utilisateur se connecte, la méthode login() appelle tous les callbacks du tableau. La forme
onXyz du nom de la variable est une convention utilisée dans tout Nette.
Latte
L'un des systèmes de templates les plus élaborés.
Model
Le modèle, ce sont les données et surtout le cœur fonctionnel de toute l'application. Il contient toute la logique applicative (on parle aussi de logique métier). C'est le M de MVC ou MVP. Toute action de l'utilisateur (connexion, ajout d'un article au panier, modification d'une valeur en base) représente une action du modèle.
Le modèle gère son état interne et offre vers l'extérieur une interface fixe. En appelant les fonctions de cette interface, nous pouvons interroger ou changer son état. Le modèle ignore l'existence de la View et du Controller.
Model-View-Controller
Une architecture logicielle née du besoin de séparer, dans les applications à interface graphique, le code de traitement (Controller) du code de la logique applicative (Model) et du code d'affichage des données (View). Cela rend l'application plus claire, facilite son développement futur et permet de tester séparément ses différentes parties.
Model-View-Presenter
Une architecture fondée sur Model-View-Controller.
Module
Un module représente une partie logique de l'application. Dans une organisation typique, c'est un groupe de presenters et de
templates traitant un domaine fonctionnel précis. Les modules sont placés dans des répertoires distincts, comme
Front/, Admin/ ou Shop/.
Par exemple, une boutique en ligne peut être divisée en :
- Frontend (
Shop/) pour parcourir les produits et acheter - Espace client (
Customer/) pour la gestion des commandes - Administration (
Admin/) pour les opérateurs
Techniquement, ce sont de simples répertoires, mais grâce à une structuration claire, ils aident à faire évoluer
l'application. Le presenter Admin:Product:List se trouverait ainsi physiquement, par exemple, dans le répertoire
app/Presentation/Admin/Product/List/ (voir le mapping des presenters).
Espace de noms
Un espace de noms, présent dans le langage PHP depuis la version 5.3 et dans certains autres langages de programmation, permet d'utiliser dans différentes bibliothèques des classes portant le même nom sans collision de noms. Voir la documentation PHP.
Presenter
Un presenter est un objet qui prend une requête traduite par le routeur depuis une requête HTTP et génère une réponse. La réponse peut être une page HTML, une image, un document XML, un fichier sur le disque, du JSON, une redirection ou tout ce que vous imaginerez.
Habituellement, le terme presenter désigne un descendant de la classe Nette\Application\UI\Presenter. En fonction des requêtes entrantes, il exécute les actions correspondantes et rend les templates.
Router
Un traducteur bidirectionnel entre une requête HTTP / URL et une action de presenter. Bidirectionnel signifie qu'il est possible de déduire une Action de presenter d'une requête HTTP et, inversement, de générer l'URL correspondant à une action. Plus d'informations dans le chapitre sur le routage des URL.
Cookie SameSite
Les cookies SameSite offrent un mécanisme permettant de reconnaître ce qui a conduit au chargement de la page. Il peut
prendre trois valeurs : Lax, Strict et None (cette dernière exige HTTPS). Si la requête
pour la page vient directement du site ou si l'utilisateur ouvre la page en la tapant directement dans la barre d'adresse ou en
cliquant sur un favori, le navigateur envoie tous les cookies au serveur (c'est-à-dire ceux portant les drapeaux
Lax, Strict et None). Si l'utilisateur arrive sur le site par un lien venant d'un autre
site, les cookies portant les drapeaux Lax et None sont transmis au serveur. Si la requête est émise
autrement, par exemple par l'envoi d'un formulaire POST depuis un autre site, un chargement dans une iframe, l'usage de
JavaScript, etc., seuls les cookies portant le drapeau None sont envoyés.
Service
Dans le contexte de l'injection de dépendances, un service désigne un objet créé et géré par le conteneur DI. Un service peut être facilement remplacé par une autre implémentation, par exemple à des fins de test ou pour changer le comportement de l'application, sans avoir à modifier le code qui l'utilise.
Snippet
Un snippet, partie d'une page qui peut être redessinée indépendamment lors d'une requête AJAX.
View
La vue est la couche de l'application chargée d'afficher le résultat d'une requête. Elle utilise généralement un système de templates et sait afficher les composants ou les résultats obtenus du modèle.