Créer un middleware
Un "Middleware" est une fonction prenant pour paramètres, les arguments de types suivants:
Request: la requête courante
Response: la future réponse
Data: le conteneur de données personnelles
Les attributs de la règle de routage correspondante sont aussi accessible via l'argument $attributes
de type array
Les middleware "tout en un"
<?php
declare(strict_types=1);
require_once './core.php';
use components\core\Data;
use components\core\Request;
use components\core\Response;
Route::get('home', '/{name}', function (Response $response, Data $data): Response {
$response->write("je suis le traitement de la route<br />");
return $response;
});
Route::before('home', function(Response $response): void {
$response->prepend("je suis le middleware avant le traitement de la route<br />");
});
Route::after('home', function(Response $response, array $attributes): void {
$response->append("je suis le middleware après le traitement de la route<br />");
$response->append(json_encode($attributes));
});
Ranger ses middlewares
<?php
namespace middlewares {
use components\core\Data;
use components\core\Response;
class MyMiddleware
{
public function __invoke(array $attributes, Data $data): void
{
$data->set('route attributes', $attributes);
}
}
}
<?php
declare(strict_types=1);
require_once './core.php';
use components\core\Data;
use components\core\Request;
use components\core\Response;
use middlewares\MyMiddleware;
Route::get('home', '/{name}', function (Response $response, Data $data): Response {
$response->writeObject($data->all());
return $response;
});
Route::before('home', MyMiddleware::class);
Lier un middleware
Il existe 2 méthodes pour lier un middleware au traitement d'une règle de routage.
Lier directement son middleware à une règle de routage
Lier le middleware à l'ensemble des règles de routage
L'objet Route contient 2 méthodes:
Route::before
Route::after
Ces 2 méthodes prennent pour arguments le nom de la route associée et un callback possédant à son tour les arguments optionnels, Request, Response, Data, mais aussi la liste des attributs de la règle de routage courante via l'argument $attributes
de type array.
Dernière mise à jour