-
Cake\Routing\Router::
connect
($route, $defaults = [], $options = [])
/
. Pour créer un
scope et connecter certaines routes, nous allons utiliser la méthode
scope()
:// Dans config/routes.php
use Cake\Routing\Route\DashedRoute;
Router::scope('/', function ($routes) {
// Connecte la route de 'fallback' générique
$routes->fallbacks(DashedRoute::class);
});
connect()
prend trois paramètres: l’URL que vous souhaitez faire
correspondre, les valeurs par défaut pour les éléments de votre route, et les
règles d’expression régulière pour aider le router à faire correspondre les
éléments dans l’URL.Le format basique pour une définition de route est:
$routes->connect(
'/url/template',
['default' => 'defaultValue'],
['option' => 'matchingRegex']
);
Une fois que vous spécifiez une URL, vous utilisez les deux derniers paramètres de
connect()
pour dire à CakePHP quoi faire avec une requête une fois
qu’elle a été matchée. Le deuxième paramètre est un tableau associatif. Les clés
du tableau devraient être appelées après les éléments de route dans l’URL, ou
les éléments par défaut: :controller
, :action
, et :plugin
. Les
valeurs dans le tableau sont les valeurs par défaut pour ces clés. Regardons
quelques exemples simples avant que nous commencions à voir l’utilisation du
troisième paramètre de connect()
:$routes->connect(
'/pages/*',
['controller' => 'Pages', 'action' => 'display']
);
/pages/
et il tend vers l’action
display()
de PagesController
La requête /pages/products
serait mappé
vers PagesController->display('products')
.En plus de l’étoile greedy
/*
il y aussi la syntaxe de l’étoile trailing
/**
. Utiliser une étoile double trailing, va capturer le reste de l’URL en
tant qu’argument unique passé. Ceci est utile quand vous voulez utilisez un
argument qui incluait un /
dedans:$routes->connect(
'/pages/**',
['controller' => 'Pages', 'action' => 'show']
);
/pages/the-example-/-and-proof
résulterait en un argument
unique passé de the-example-/-and-proof
.Vous pouvez utiliser le deuxième paramètre de
connect()
pour fournir tout
paramètre de routing qui est composé des valeurs par défaut de la route:$routes->connect(
'/government',
['controller' => 'Pages', 'action' => 'display', 5]
);
connect()
pour définir les paramètres par défaut. Si vous construisez un
site qui propose des produits pour différentes catégories de clients, vous
pourriez considérer la création d’une route. Cela vous permet de vous lier à
/government
plutôt qu’à /pages/display/5
.Une utilisation classique du routing peut impliquer la création de segments d’URL qui ne correspondent pas aux noms de vos controllers ou de vos models. Imaginons qu’au lieu de vouloir accéder à une URL
/users/some_action/5
,
vous souhaitiez y accéder via /cooks/une_action/5
. Pour ce faire,
vous devriez configurer la route suivante:$routes->connect(
'/cooks/:action/*', ['controller' => 'Users']
);
/cooks/
devrait être envoyée
au UsersController
. L’action appelée dépendra de la valeur du paramètre
:action
. En utilisant Les Eléments de Route, vous pouvez créer des routes
variables, qui acceptent les entrées utilisateur ou les variables. La route
ci-dessus utilise aussi l’étoile greedy. L’étoile greedy indique au
Router
que cette route devrait accepter tout argument de position
supplémentaire donné. Ces arguments seront rendus disponibles dans le tableau
Arguments Passés.Quand on génère les URLs, les routes sont aussi utilisées. Utiliser
['controller' => 'Users', 'action' => 'some_action', 5]
en URL va sortir
/cooks/some_action/5
si la route ci-dessus est la première correspondante
trouvée.Les routes connectées jusque là fonctionneront avec n’importe quel verbe HTTP. Si vous souhaitez construire une API REST, vous aurez probablement besoin de faire correspondre des actions HTTP à des méthodes de controller différentes. Le
RouteBuilder
met à disposition des méthodes qui rendent plus facile la
définition de routes pour des verbes HTTP spécifiques:// Crée une route qui ne répondra qu'aux requêtes GET.
$routes->get(
'/cooks/:id',
['controller' => 'Users', 'action' => 'view'],
'users:view'
);
// Crée une route qui ne répondra qu'aux requêtes PUT
$routes->put(
'/cooks/:id',
['controller' => 'Users', 'action' => 'update'],
'users:update'
);
- GET
- POST
- PUT
- PATCH
- DELETE
- OPTIONS
- HEAD
Aucun commentaire:
Enregistrer un commentaire
Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.