Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions en/development/routing.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
-------------------

Expand All @@ -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

Expand Down
Binary file added fr/_static/img/middleware-request.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added fr/_static/img/middleware-setup.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
30 changes: 23 additions & 7 deletions fr/appendices/3-5-migration-guide.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
--------------------------

Expand All @@ -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 <https://github.com/cakephp/app/tree/3.next/bin/cake.php>`_.

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
----
Expand All @@ -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
----------

Expand Down
72 changes: 48 additions & 24 deletions fr/controllers/middleware.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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 <https://packagist.org>`__.
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 <https://packagist.org>`__.

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
Expand All @@ -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;
Expand All @@ -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;
}
}

Expand All @@ -63,27 +87,27 @@ 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
);

// 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
);
Expand All @@ -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
Expand Down Expand Up @@ -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;
}
}

Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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 :
Expand Down
63 changes: 53 additions & 10 deletions fr/development/routing.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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:

Expand Down
3 changes: 3 additions & 0 deletions fr/orm/database-basics.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down