Typiquement si vous voulez afficher quelque chose en page d’accueil,
vous ajoutez ceci au fichier routes.php:
Ceci va exécuter la méthode
La route ci-dessus accepte toute URL qui ressemble à
Dans l’exemple précédent, le caractère jocker
Le Router de CakePHP peut aussi faire correspondre les routes en reverse. Cela signifie qu’à partir d’un tableau contenant des paramètres similaires, il est capable de générer une chaîne URL:
Les routes peuvent aussi être labellisées avec un nom unique, cela vous permet
de rapidement leur faire référence lors de la construction des liens plutôt
que de spécifier chacun des paramètres de routing:
Pour aider à garder votre code de router « DRY », le router apporte le concept
de “scopes”. Un scope (étendue) défini un segment de chemin commun, et
optionnellement des routes par défaut. Toute route connectée à l’intérieur d’un
scope héritera du chemin et des routes par défaut du scope qui la contient:
Le route ci-dessus matchera
Le squelette d’application contient quelques routes pour vous aider à commencer. Une fois que vous avez ajouté vos propres routes, vous pouvez retirer les routes par défaut si vous n’en avez pas besoin.
use Cake\Routing\Router;
// EN utilisant le route builder scopé.
Router::scope('/', function ($routes) {
$routes->connect('/', ['controller' => 'Articles', 'action' => 'index']);
});
// En utilisant la méthode statique.
Router::connect('/', ['controller' => 'Articles', 'action' => 'index']);
Router
fournit deux interfaces pour connecter les routes. La méthode
statique est une interface retro-compatible, alors que le builder scopé (lié la
portée) offre une syntaxe plus laconique pour construire des routes multiples,
et de meilleures performances.Ceci va exécuter la méthode
index
dans ArticlesController
quand la page
d’accueil de votre site est visitée. Parfois vous avez besoin de routes
dynamiques qui vont accepter plusieurs paramètres, ce sera par exemple le cas
d’une route pour voir le contenu d’un article:$routes->connect('/articles/*', ['controller' => 'Articles', 'action' => 'view']);
/articles/15
et appelle
la méthode view(15)
dans ArticlesController
. En revanche, ceci ne va pas
empêcher les visiteurs d’accéder à une URLs ressemblant à
/articles/foobar
. Si vous le souhaitez, vous pouvez restreindre certains
paramètres grâce à une expression régulière:$routes->connect(
'/articles/:id',
['controller' => 'Articles', 'action' => 'view'],
)
->setPatterns(['id' => '\d+'])
->setPass(['id']);
// Avant 3.5, utilisez les tableaux d'options
$routes->connect(
'/articles/:id',
['controller' => 'Articles', 'action' => 'view'],
['id' => '\d+', 'pass' => ['id']]
)
*
est remplacé par un
placeholder :id
. Utiliser les placeholders nous permet de valider les
parties de l’URL, dans ce cas, nous utilisons l’expression régulière \d+
pour que seuls les chiffres fonctionnent. Finalement, nous disons au Router de
traiter le placeholder id
comme un argument de fonction pour la fonction
view()
en spécifiant l’option pass
. Vous pourrez en voir plus sur leur
utilisation plus tard.Le Router de CakePHP peut aussi faire correspondre les routes en reverse. Cela signifie qu’à partir d’un tableau contenant des paramètres similaires, il est capable de générer une chaîne URL:
use Cake\Routing\Router;
echo Router::url(['controller' => 'Articles', 'action' => 'view', 'id' => 15]);
// Va afficher
/articles/15
// Dans le fichier routes.php
$routes->connect(
'/login',
['controller' => 'Users', 'action' => 'login'],
['_name' => 'login']
);
use Cake\Routing\Router;
echo Router::url(['_name' => 'login']);
// Va afficher
/login
Router::scope('/blog', ['plugin' => 'Blog'], function ($routes) {
$routes->connect('/', ['controller' => 'Articles']);
});
/blog/
et renverra
Blog\Controller\ArticlesController::index()
.Le squelette d’application contient quelques routes pour vous aider à commencer. Une fois que vous avez ajouté vos propres routes, vous pouvez retirer les routes par défaut si vous n’en avez pas besoin.
Aucun commentaire:
Enregistrer un commentaire
Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.