diff --git a/en/development/routing.rst b/en/development/routing.rst index 6bae3a3890..6898ffe716 100644 --- a/en/development/routing.rst +++ b/en/development/routing.rst @@ -928,10 +928,9 @@ middleware applied to routes in each scope will be isolated:: }); In the above example, the two uses of the ``/blog`` scope do not share -middleware. However, both of these scopes will inherit middleware defied in +middleware. However, both of these scopes will inherit middleware defined in their enclosing scopes. - Grouping Middleware ------------------- @@ -947,7 +946,6 @@ can:: // Apply the group $routes->applyMiddleware('web'); - .. versionadded:: 3.5.0 Scoped middleware & middleware groups were added in 3.5.0 diff --git a/fr/_static/img/middleware-request.png b/fr/_static/img/middleware-request.png new file mode 100644 index 0000000000..7301b09033 Binary files /dev/null and b/fr/_static/img/middleware-request.png differ diff --git a/fr/_static/img/middleware-setup.png b/fr/_static/img/middleware-setup.png new file mode 100644 index 0000000000..5e65f5c499 Binary files /dev/null and b/fr/_static/img/middleware-setup.png differ diff --git a/fr/appendices/3-5-migration-guide.rst b/fr/appendices/3-5-migration-guide.rst index 7598b2e873..16a8cab665 100644 --- a/fr/appendices/3-5-migration-guide.rst +++ b/fr/appendices/3-5-migration-guide.rst @@ -136,6 +136,15 @@ variations mineures qui pourraient avoir un impact sur votre application. Nouvelles Fonctionnalités ========================= +Middleware sur Scopes +--------------------- + +Les middlewares peuvent maintenant être appliqués conditionnellement à des routes +sur des URL 'scopées'. Cela vous permet de construire des stacks de middlewares +spécifiques pour différentes parties de votre application sans avoir à faire des +tests sur l'URL dans le code de vos middlewares. Plus d'informations dans la section +:ref:`connecting-scoped-middleware`. + Nouveau Lanceur de Console -------------------------- @@ -147,14 +156,14 @@ elles sont nommées et comment les shells récupèrent leurs dépendances. Adopt cette nouvelle classe nécessite que vous remplaciez le contenu de votre fichier ``bin/cake.php`` par le `fichier suivant `_. -Cache ------ +Fallbacks pour les Moteurs de Cache +----------------------------------- -* Les moteurs de cache peuvent maintenant être configurés avec une clé ``fallback`` - qui permet de définir une configuration de cache sur laquelle se rabattre si - le moteur était mal configuré ou indisponible. Reportez-vous à la section - :ref:`cache-configuration-fallback` pour plus d'informations sur la configuration - de 'fallbacks' pour vos configurations de cache. +Les moteurs de cache peuvent maintenant être configurés avec une clé ``fallback`` +qui permet de définir une configuration de cache sur laquelle se rabattre si +le moteur était mal configuré ou indisponible. Reportez-vous à la section +:ref:`cache-configuration-fallback` pour plus d'informations sur la configuration +de 'fallbacks' pour vos configurations de cache. Core ---- @@ -174,6 +183,13 @@ Console que les applications puissent définir les outils en ligne de commande qu'elles offrent. +Database +-------- + +* Une nouvelle option ``mask`` pour le driver SQLite a été ajoutée. Cette option + vous permet de définir les droits sur le fichier de la base SQLite quand il est + créé. + Datasource ---------- diff --git a/fr/controllers/middleware.rst b/fr/controllers/middleware.rst index bf2c045135..2648010c65 100644 --- a/fr/controllers/middleware.rst +++ b/fr/controllers/middleware.rst @@ -3,12 +3,33 @@ Middleware Les objets Middleware vous donnent la possibilité d'encapsuler votre application dans des couches modulables et réutilisables du gestionnaire de requête ou de -logique de construction de réponses. Les Middleware font partie de la nouvelle -pile HTTP qui influence la requête et les interfaces de réponse PSR-7. Ceci -permet d'utiliser n'importe quel middleware compatible avec PSR-7 disponible -sur `Packagist `__. +logique de construction de réponses. Visuellement, votre application se trouve au +centre et les middlewares entourent l'application comme un oignon. Ici, on peut voir +une application entourée des middlewares Routes, Assets, gestion d'Exceptions et +gestion des headers CORS. -CakePHP fournit nativement plusieurs middleware : +.. image:: /_static/img/middleware-setup.png + +Quand une requête est gérée par votre application, elle entre par le middleware le +plus à l'extérieur. Chaque middleware peut soit passer la requête / la réponse à la +couche suivante, soit retourner une réponse. Retourner une réponse empêchera les couches +plus basses d'accéder à la requête. Un exemple illustrant ce principe serait +l'AssetMiddleware qui gérera la requête d'une image de plugin pendant le développement. + +.. image:: /_static/img/middleware-request.png + +Si aucun middleware n'effectue une action pour gérer la requête, un controller sera +utilisé et son action exécutée, ou une exception sera levée et génerera une erreur. + +Les Middlewares font partie de la nouvelle pile HTTP qui influence la requête et +les interfaces de réponse PSR-7. Ceci permet d'utiliser n'importe quel middleware +compatible avec PSR-7 disponible sur `Packagist `__. + +Les Middlewares dans CakePHP +============================ + +CakePHP fournit nativement plusieurs middlewares pour gérer des cas classiques +d'une application web : * ``Cake\Error\Middleware\ErrorHandlerMiddleware`` capture les exceptions à partir du middleware encapsulé et affiche un page d'erreur en utilisant le @@ -35,11 +56,14 @@ CakePHP fournit nativement plusieurs middleware : Utilisation des Middleware ========================== -Les middleware sont ajoutés dans la méthode ``middleware`` dans la classe -``App\Application``. Si la classe ``App\Application`` n'existe pas, +Les middlewares peuvent être appliqués de manière globale à votre application ou +un scope de routing. + +Pour appliquer un middleware à toutes les requêtes, utilisez la méthode ``middleware`` +de la classe ``App\Application``. Si la classe ``App\Application`` n'existe pas, reportez-vous à la section :ref:`adding-http-stack` pour plus d'informations. La méthode d'attache ``middleware`` de votre application sera appelée très tôt -dans le processus de requête, vous pouvez utiliser les objets ``Middleware`` +dans le processus de requête, vous pouvez utiliser les objets ``MiddlewareQueue`` pour en attacher :: namespace App; @@ -49,11 +73,11 @@ pour en attacher :: class Application extends BaseApplication { - public function middleware($middlewareStack) + public function middleware($middlewareQueue) { // Attache le gestionnaire d'erreur dans la file du middleware - $middlewareStack->add(new ErrorHandlerMiddleware()); - return $middlewareStack; + $middlewareQueue->add(new ErrorHandlerMiddleware()); + return $middlewareQueue; } } @@ -63,19 +87,19 @@ différentes opérations :: $layer = new \App\Middleware\CustomMiddleware; // Le middleware sera ajouté à la fin de la file. - $middlewareStack->add($layer); + $middlewareQueue->add($layer); // Le middleware sera ajouté au début de la file - $middlewareStack->prepend($layer); + $middlewareQueue->prepend($layer); // Insère dans une place spécifique. Si cette dernière est // hors des limites, il sera ajouté à la fin. - $middlewareStack->insertAt(2, $layer); + $middlewareQueue->insertAt(2, $layer); // Insère avant un autre middleware. // Si la classe nommée ne peut pas être trouvée, // une exception sera renvoyée. - $middlewareStack->insertBefore( + $middlewareQueue->insertBefore( 'Cake\Error\Middleware\ErrorHandlerMiddleware', $layer ); @@ -83,7 +107,7 @@ différentes opérations :: // Insère après un autre middleware. // Si la classe nommée ne peut pas être trouvée, // le middleware sera ajouté à la fin. - $middlewareStack->insertAfter( + $middlewareQueue->insertAfter( 'Cake\Error\Middleware\ErrorHandlerMiddleware', $layer ); @@ -106,8 +130,8 @@ un middleware :: EventManager::instance()->on( 'Server.buildMiddleware', - function ($event, $middlewareStack) { - $middlewareStack->add(new ContactPluginMiddleware()); + function ($event, $middlewareQueue) { + $middlewareQueue->add(new ContactPluginMiddleware()); }); Requêtes et Réponses PSR-7 @@ -262,14 +286,14 @@ Après avoir créer le middleware, attachez-le à votre application :: class Application { - public function middleware($middlewareStack) + public function middleware($middlewareQueue) { // Ajoutez votre middleware dans la file - $middlewareStack->add(new TrackingCookieMiddleware()); + $middlewareQueue->add(new TrackingCookieMiddleware()); // Ajoutez d'autres middleware dans la file - return $middlewareStack; + return $middlewareQueue; } } @@ -302,7 +326,7 @@ appliqué au stack de middlewares:: ->noOpen() ->noSniff(); - $middleware->add($headers); + $middlewareQueue->add($headers); .. versionadded:: 3.5.0 ``SecurityHeadersMiddleware`` a été ajouté dans 3.5.0 @@ -326,7 +350,7 @@ Les données des cookies sont chiffrées via OpenSSL, en AES:: Configure::read('Security.cookieKey') ); - $middleware->add($cookies); + $middlewareQueue->add($cookies); .. note:: Il est recommandé que la clé de chiffrage utilisée pour les données des cookies @@ -354,7 +378,7 @@ stack de middlewares:: ]; $csrf = new CsrfProtectionMiddleware($options); - $middleware->add($csrf); + $middlewareQueue->add($csrf); Des options peuvent être passées au constructor du middleware. Les options utilisables sont : diff --git a/fr/development/routing.rst b/fr/development/routing.rst index 77ff1fece3..e3a9bad2ad 100644 --- a/fr/development/routing.rst +++ b/fr/development/routing.rst @@ -903,11 +903,16 @@ vues automatiquement en se basant sur les types de contenu. Connecter des Middlewares à un scope ------------------------------------ -Les middleware peuvent être appliqués à l'ensemble de votre application ou bien -à des scopes spécifiques. Avant qu'un middleware ne soit appliqué à un scope, -il a besoin d'être enregistré:: +Bien que les middlewares puissent être appliqués à toute votre application, appliquer +les middlewares à des 'scopes' de routing offre plus de flexibilité puisque vous +pouvez appliquer des middlewares seulement où ils sont nécessaires permettant à vos +middlewares de ne pas nécessiter de logique spécifique sur le comment / où il doit +s'appliquer. - // dans config/routes.php +Avant qu'un middleware ne puisse être appliqué à un scope, il a besoin d'être +enregistré dans la collection de routes:: + + // in config/routes.php use Cake\Http\Middleware\CsrfProtectionMiddleware; use Cake\Http\Middleware\EncryptedCookieMiddleware; @@ -922,16 +927,54 @@ Une fois enregistré dans le builder de routes, le middleware peut être appliqu $routes->scope('/cms', function ($routes) { // Active les middlewares enregistrés pour ce scope. $routes->applyMiddleware('csrf', 'cookies'); + $routes->get('/articles/:action/*', ['controller' => 'Articles']) }); -Dans les cas où vous avez des scopes imbriqués, tous les middlewares appliqués -à chacun des scopes seront appliqués à partir du middleware de plus haut niveau -en terminant par les scopes imbriqués. En appliquant un middleware à des scopes -spécifiques, vous éviterez d'ajouter de la complexité dans la logique de vos -middlewares et les laisser s'occuper de leur tâche principale. +Dans le cas où vous auriez des 'scopes' imbriqués, les "sous" scopes hériteront +des middlewares apppliqués dans le scope contenant:: + + $routes->scope('/api', function ($routes) { + $routes->applyMiddleware('ratelimit', 'auth.api'); + $routes->scope('/v1', function ($routes) { + $routes->applyMiddleware('v1compat'); + // Définissez vos routes + }); + }); + +Dans l'exemple ci-dessus, les routes définies dans ``/v1`` auront les middlewares +'ratelimit', 'auth.api', and 'v1compat' appliqués. Si vous ré-ouvrez un scope, les +middlewares appliqués aux routes dans chaque scopes seront isolés:: + + $routes->scope('/blog', function ($routes) { + $routes->applyMiddleware('auth'); + // Connecter les actions qui nécessitent l'authentification aux 'blog' ici + }); + $routes->scope('/blog', function ($routes) { + // Connecter les actions publiques pour le 'blog' ici + }); + +Dans l'exemple ci-dessus, les 2 utilisations du scope ``/blog`` ne partagent +pas les middlewares. Par contre, les 2 scopes hériteront des middlewares définis +dans le scope qui les contient. + +Grouper les Middlewares +----------------------- + +Pour vous aider à garder votre code :abbr:`DRY (Do not Repeat Yourself)`, les +middlewares peuvent être combinés en groupes. Une fois créés, les groupes peuvent +être appliqués comme des middlewares:: + + $routes->registerMiddleware('cookie', new EncryptedCookieMiddleware()); + $routes->registerMiddleware('auth', new AuthenticationMiddleware()); + $routes->registerMiddleware('csrf', new CsrfProtectionMiddleware()); + $routes->middlewareGroup('web', ['cookie', 'auth', 'csrf']); + + // Application du groupe + $routes->applyMiddleware('web'); .. versionadded:: 3.5.0 - Le support des middlewares par scope a été ajouté dans 3.5.0 + Le support des middlewares par scope et des groupes de middlewares + a été ajouté dans 3.5.0 .. _resource-routes: diff --git a/fr/orm/database-basics.rst b/fr/orm/database-basics.rst index b0df5958c2..e95b688217 100644 --- a/fr/orm/database-basics.rst +++ b/fr/orm/database-basics.rst @@ -265,6 +265,9 @@ cacheMetadata metadata n'est pas conseillé et peut entraîner de faibles performances. Consultez la section sur :ref:`database-metadata-cache` pour plus d'information. +mask + Définit les droits sur le fichier de base de données généré (seulement supporté + par SQLite) Au point où nous sommes, vous pouvez aller voir :doc:`/intro/conventions`. Le nommage correct pour vos