Routage dans Bow Framework
Introduction​
Le routage est un élément essentiel dans le développement d'une application web. Il permet de relier une URL à une action spécifique dans le contrôleur de l'application.
Dans Bow Framework, le système de routage est directement intégré à l'instance de l'application, via la variable superglobale $router.
Les routes de l'application se définissent dans le fichier app.php, qui se trouve dans le dossier routes de votre projet.
Mappage d'URL​
Le système de routage de Bow Framework permet de faire correspondre une URL à un contrôleur ou une action. Cela se fait en associant une URL à une m éthode HTTP (GET, POST, PUT, DELETE, etc.) et en définissant l'action à exécuter lorsqu'une requête correspond à cette route.
Structure du Routage​
Le routage dans Bow Framework s'écrit ainsi :
$router->[method](url, action);
method: Le verbe HTTP (GET,POST,PUT,DELETE,OPTIONS,PATCH), toujours écrit en minuscule.url: L'URL à matcher.action: L'action à exécuter. Cela peut être une closure (fonction anonyme), un tableau de closures, ou le nom d'un contrôleur.
Exemple de Routage​
Avec une Closure :​
$router->get('/', function () {
return 'Hello, World!';
});
Une closure est une fonction anonyme qui peut être définie à la volée et utilisée dans le routage de Bow Framework. Pour plus d'informations, consultez la documentation sur les closures.
Avec un tableau de fonctions (callables) :​
$callables = [];
$callables[] = function () {
echo 'Hello World';
return true; // Retourne true pour exécuter la fonction suivante
};
$callables[] = function () {
echo 'Bien merci';
};
$router->get('/', $callables);
La première fonction doit retourner true pour permettre à la suivante de s'exécuter. Si elle retourne false, l'exécution des fonctions suivantes s'arrêtera.
Avec un contrôleur :​
$router->get('/', 'UserController::action');
Avec un contrôleur et un middleware :​
$router->get('/', ['middleware' => 'ip', 'controller' => 'UserController::action']);
Utilisation d'un contrôleur avec la méthode __invoke :​
Si le contrôleur implémente la méthode magique __invoke, vous pouvez l'utiliser directement comme une fonction :
$router->get('/', UserController::class);
Liste des Méthodes de Mappage​
Voici les principales méthodes de routage dans Bow Framework :
$router->get($url, $action);
$router->post($url, $action);
$router->put($url, $action);
$router->delete($url, $action);
$router->option($url, $action);
$router->patch($url, $action);
Exemples de Routage avec différentes Méthodes HTTP​
GET: Pour récupérer des données
$router->get('/', function () {
return 'Hello, World!';
});
POST: Pour envoyer des données au serveur
$router->post('/', function () {
return 'Data posted';
});
PUT: Pour mettre Ă jour des ressources existantes
$router->put('/', function () {
return 'Resource updated';
});
DELETE: Pour supprimer une ressource
$router->delete('/', function () {
return 'Resource deleted';
});
PATCH: Pour appliquer des modifications partielles Ă une ressource
$router->patch('/', function () {
return 'Partial update applied';
});
OPTIONS: Pour récupérer les options disponibles pour une ressource
$router->options('/', function () {
return 'Options retrieved';
});
Les navigateurs ne supportent pas les méthodes DELETE, PUT et PATCH nativement. Pour contourner cette limitation, vous pouvez ajouter un champ caché dans vos formulaires HTML :
<input type="hidden" name="_method" value="DELETE">
Ceci va permettre à Bow Framework de comprendre que vous voulez contacter la route associée à la méthode DELETE.
Mappage Multiple​
match - Mappage avec plusieurs Méthodes HTTP​
Si vous souhaitez faire correspondre plusieurs méthodes HTTP (comme GET et POST) à une même URL, vous pouvez utiliser la méthode match.
$router->match(['GET', 'POST'], '/users', function () {
// Code ici
});
Vous pouvez également traiter les différents types de requêtes dans une seule action :
use Bow\Http\Request;
$router->match(['GET', 'POST'], '/users', function (Request $request) {
if ($request->isPost()) {
// Traitement pour la requĂŞte POST
} else {
// Traitement pour la requĂŞte GET
}
});
any - Mappage avec n'importe quelle Méthode HTTP​
Si vous souhaitez que n'importe quelle méthode HTTP corresponde à une URL, vous pouvez utiliser any :
$router->any('/', function () {
// Code ici
});
Groupes de Routes avec prefix​
Lorsque vous avez plusieurs routes qui partagent un préfixe similaire (par exemple, /users, /users/:id, /users/:id/delete), vous pouvez utiliser la méthode prefix pour organiser votre code de manière plus propre.
$router->prefix('/users', function () use ($router) {
$router->get('/', function () {
// Code pour récupérer tous les utilisateurs
});
$router->get('/:id', function ($id) {
// Code pour récupérer un utilisateur par ID
});
$router->get('/:id/delete', function ($id) {
// Code pour supprimer un utilisateur
});
});
La méthode prefix ne peut pas être imbriquée dans d'autres groupes de routes.
Personnalisation des Routes​
BowPHP permet de personnaliser vos routes de plusieurs façons, notamment :
- Capturer des variables dans l'URL
- Ajouter des critères de validation sur les variables capturées
- Nommer les routes pour une gestion plus facile
- Associer des middlewares à des routes spécifiques
- Combiner différentes actions (middleware, contrôleur)
Capturer des Variables dans l'URL​
Pour capturer des variables dans l'URL, utilisez la notation :variable_name. Ces variables seront ensuite passées à l'action correspondante.
$router->get('/:name', function ($name) {
return 'Bonjour ' . $name;
});
Ajouter des Critères de Validation sur les Variables​
Lorsque vous capturez des variables, vous pouvez les valider à l'aide de la méthode where pour garantir que les données sont bien conformes à une certaine règle.
Exemple avec une seule variable :​
$router->get('/:name', function ($name) {
return 'Bonjour ' . $name;
})->where('name', '[a-z]+');
Exemple avec plusieurs variables :​
$router->get('/:name/:lastname/:number', function ($name, $lastname, $number) {
return sprintf('Bonjour %s %s, votre numéro est %s', $name, $lastname, $number);
})->where([
'name' => '[a-z]+',
'lastname' => '[a-z]+',
'number' => '\d+'
]);
La méthode where permet de définir des règles de validation pour chaque variable capturée dans l'URL.
Nommer les Routes​
Pour faciliter la gestion des routes dans les grandes applications, vous pouvez leur attribuer des noms. Cela permet de référencer facilement une route dans votre code.
$router->get('/:name', function ($name) {
return 'Bonjour ' . $name;
})->name('greeting');
Utilisation des Middlewares​
Un middleware est une fonction ou un ensemble de fonctions qui interviennent entre la requête et l'action à exécuter. Vous pouvez associer un ou plusieurs middlewares à une route.
Exemple d'association de middleware :​
$router->get('/:name', ['middleware' => 'auth', function ($name) {
return 'Bonjour ' . $name;
}]);
// Ou avec la méthode `middleware()` :
$router->get('/:name', function ($name) {
return 'Bonjour ' . $name;
})->middleware('auth');
Composition d'Actions​
Bow Framework permet également de combiner un contrôleur et un middleware pour une route spécifique. Voici un exemple :
$router->get('/:name', [
'middleware' => 'auth',
'controller' => 'UserController::show'
]);
Utilisation de la méthode route​
La méthode route dans Bow Framework permet de définir une route de manière plus simple et flexible. Elle accepte un tableau de paramètres, ce qui vous permet de personnaliser la route de façon plus détaillée.
Prototype de la méthode route​
$router->route([
'path' => '/',
'method' => "GET",
'handler' => 'handler'
]);
Liste des options disponibles dans route​
| Paramètre | Type | Description |
|---|---|---|
path | String | Le chemin de l'URL Ă matcher |
method | String, Array | Méthode HTTP (GET, POST, PUT, DELETE, OPTIONS, PATCH) |
handler | String, Array | Action à exécuter (peut être une closure, un contrôleur, etc.) |
middleware | String, Array | Middleware(s) à appliquer avant d'exécuter l'action |
where | String, Array | Contrainte(s) appliquée(s) sur les variables dans l'URL |
name | String, Array | Nom de la route pour une gestion facile |
Exemple d'utilisation de route avec une closure​
$router->route([
'path' => '/',
'method' => "GET",
'handler' => function () {
return "Hello, Bow";
}
]);
Exemple d'utilisation de route avec un contrôleur​
$router->route([
'path' => '/',
'method' => "GET",
'handler' => 'HomeController::action'
]);
Pour plus d'informations sur les contrĂ´leurs, consultez la section ContrĂ´leurs.
Exemple d'utilisation de route avec un contrôleur et un middleware​
$router->route([
'path' => '/',
'method' => "GET",
'handler' => 'HomeController::show',
'middleware' => ['auth']
]);
Pour en savoir plus sur les middlewares, consultez la section Middlewares.
Exemple d'utilisation de route avec un contrôleur, un middleware et une restriction​
$router->route([
'path' => '/:name',
'method' => "GET",
'handler' => 'HomeController::show',
'middleware' => ['auth'],
'where' => ['name' => '[a-z]+']
]);
Cette méthode est particulièrement utile lorsque vous avez besoin d'une syntaxe plus concise et que vous souhaitez avoir plus de contrôle sur les paramètres de votre route.
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.