Aller au contenu principal
Version: 5.x

Routage dans Bow Framework

Introduction​

Ă€ propos du routage

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!';
});
Qu'est-ce qu'une closure ?

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);
Attention

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';
});
Note importante

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​

Méthode match

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
});
});
Limitation importante

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+'
]);
Validation des variables

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ètreTypeDescription
pathStringLe chemin de l'URL Ă  matcher
methodString, ArrayMéthode HTTP (GET, POST, PUT, DELETE, OPTIONS, PATCH)
handlerString, ArrayAction à exécuter (peut être une closure, un contrôleur, etc.)
middlewareString, ArrayMiddleware(s) à appliquer avant d'exécuter l'action
whereString, ArrayContrainte(s) appliquée(s) sur les variables dans l'URL
nameString, ArrayNom 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'
]);
En savoir plus

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']
]);
En savoir plus

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]+']
]);
Avantage de la méthode route

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.