🚥 Middlewares
- Introduction
- Comment ça marche
- Ajouter un middleware
- Enregistrement de middleware
- Utiliser le middleware
Introduction
Les middlewares constituent un mécanisme pratique pour filtrer les requêtes HTTP entrant dans votre application. Par exemple vous pouvez faire un middleware pour vérifier si un utilisateur est connecté et ensuite faire une action en fonction. Vous pouvez exécuter du code avant et après votre application Bow pour manipuler les objets Request
et Response
comme bon vous semble.
Comment ça marche
Différents Frameworks utilisent le système de middleware différemment. Bow ajoute un middleware sous forme de file d'attente au dessus de votre application principale. Chaque nouvelle couche de middleware est ajouté la file de middleware existante. La structure de file se dilate vers l'extérieur au fure et à mesure que les couches intermédiaires supplémentaires sont ajoutées.
Lorsque vous exécutez l'application Bow, les objets Request traversent la structure du middleware de l'extérieur vers l'intérieur. Ils entrent d'abord dans le middleware le plus externe, puis dans le prochain middleware le plus externe (et ainsi de suite), jusqu'à ce qu'ils atteignent l'application elle-même. Une fois que l'application Bow a distribué la route approprié, l'objet Response résultant quitte l'application Bow et est sérialisé dans une réponse HTTP qui est renvoyé au client HTTP.
La seule condition stricte est qu'un middleware doit renvoyer une value autre de null
. Chaque middleware devra appeler le middleware suivant et lui transmettre les objets Request
comme arguments via la méthode $next
.
Bow inclut plusieur middlewares par defaut comme le middleware
csrf
etauth
.
Ajouter un middleware
Pour ajouter un middleware il faut utiliser la commande add:middleware
de php bow
:
php bow add:middleware IpMiddleware
Notez que tout les middlewares sont sauvegardés par défaut dans le fichier app/Middleware
.
Alors, le middleware que nous venons d'ajouter, vérifira l'adresse IP du client et si son adresse est égale à 127.0.0.1
on dira que l'application est MODE DEV.
Mais d'abort, regardons le contenu du fichier IpMiddleware
. C'est la méthode process
qui permet de lancer le middleware et la callable permet de lancer le prochaine middleware.
namespace App\Middlewares;
use Bow\Http\Request;
class IpMiddleware
{
/**
* Fonction de lancement du middleware.
*
* @param Request $request
* @param callable $next
*/
public function process(Request $request, callable $next)
{
//
return $next($request);
}
}
Pour notre exemple on aura alors le process
suivant:
public function process(Request $request, callable $next)
{
if ($request->ip() == '127.0.0.1') {
return "MODE DEV";
}
return $next($request);
}
Enregistrement de middleware
Généralement l'enregistrement ce faire dans le fichier app/Kernel.php
avec une clé qui l'identifie.
public function middlewares()
{
return [
...
'ip' => \App\Middlewares\IpMiddleware::class
...
];
}
Il est aussi possible d'ajouter les middlwares de façon globle dans l'application. Et ceci se faire dans le fichier de routes
avec la méthode middleware
sur $app
qui va nous retourné une instance de \Bow\Router\Router::class
donc tout les routes qui sera definir avec cette instance héritérons des middlewares spécifiés.
$router = $app->middleware(\App\Middlewares\IpMiddleware::class);
$router->get('/', 'HomeController::index');
// Ou
$router = $app->middleware([
\App\Middlewares\IpMiddleware::class,
\App\Middlewares\OtherMiddleware::class,
]);
$router->get('/', 'HomeController::index');
Utiliser le middleware
Après avoir définir un middleware dans le app/Kernel.php
.
$app->get('/', 'HomeController::index')->middleware('ip');
$app->get('/', 'HomeController::index')->middleware(['ip', 'autre']);
// ou
$app->route([
'path' => '/',
'method' => 'GET',
'handler' => 'HomeController::index',
'middleware' => ['ip', 'autre']
]);
Il manque quelque chose ?
Si vous rencontrez des problèmes avec la documentation ou si vous avez des suggestions pour améliorer la documentation ou le projet en général, veuillez déposer une issue pour nous, ou envoyer un tweet mentionnant le compte Twitter @bowframework ou sur directement sur le github.