Vous pouvez spécifier vos propres éléments de route et ce faisant
cela vous donne le pouvoir de définir des places dans l’URL où les
paramètres pour les actions du controller doivent se trouver. Quand
une requête est faite, les valeurs pour ces éléments de route se
trouvent dans
Cet exemple simple montre comment créer une manière rapide de voir les models
à partir de tout controller en élaborant une URL qui ressemble à
CakePHP ne produit pas automatiquement d’urls en minuscule avec des tirets quand vous utilisez le paramètre
La classe spéciale
Une fois que cette route a été définie, la requête
Si vous avez un unique controller dans votre application et que vous ne voulez pas que le nom du controller apparaisse dans l’URL, vous pouvez mapper toutes les URLs aux actions dans votre controller. Par exemple, pour mapper toutes les URLs aux actions du controller
Si vous souhaitez fournir une URL non sensible à la casse, vous pouvez utiliser
les modificateurs en ligne d’expression régulière:
Un exemple de plus, et vous serez un pro du routing:
C’est assez complexe, mais montre comme les routes peuvent vraiment
devenir puissantes. L’URL fournie a quatre éléments de route. Le premier
nous est familier: c’est une route par défaut qui dit à CakePHP d’attendre
un nom de controller.
Ensuite, nous spécifions quelques valeurs par défaut. Quel que soit le controller, nous voulons que l’action
Finalement, nous spécifions quelques expressions régulières qui vont matcher les années, mois et jours sous forme numérique. Notez que les parenthèses (le groupement) ne sont pas supportées dans les expressions régulières. Vous pouvez toujours spécifier des alternatives, comme dessus, mais ne pas grouper avec les parenthèses.
Une fois définie, cette route va matcher
Il y a plusieurs éléments de route qui ont une signification spéciale dans CakePHP, et ne devraient pas être utilisés à moins que vous ne souhaitiez spécifiquement utiliser leur signification.
$this->request->getParam()
dans le controller. Quand vous
définissez un élément de route personnalisé, vous pouvez spécifier en option
une expression régulière - ceci dit à CakePHP comment savoir si l’URL est
correctement formée ou non. Si vous choisissez de ne pas fournir une expression
régulière, toute expression non /
sera traitée comme une partie du
paramètre:$routes->connect(
'/:controller/:id',
['action' => 'view']
)->setPatterns(['id' => '[0-9]+']);
// Avant 3.5, utilisez les options de tableau
$routes->connect(
'/:controller/:id',
['action' => 'view'],
['id' => '[0-9]+']
);
/controllername/:id
. L’URL fournie à connect() spécifie deux éléments de
route: :controller
et :id
. L’élément :controller
est l’élément de
route par défaut de CakePHP, donc le router sait comment matcher et identifier
les noms de controller dans les URLs. L’élément :id
est un élément de route
personnalisé, et doit être clarifié plus loin en spécifiant une expression
régulière correspondante dans le troisième paramètre de connect()
.CakePHP ne produit pas automatiquement d’urls en minuscule avec des tirets quand vous utilisez le paramètre
:controller
. Si vous avez besoin de ceci,
l’exemple ci-dessus peut être réécrit en:use Cake\Routing\Route\DashedRoute;
// Crée un builder avec une classe de Route différente.
$routes->scope('/', function ($routes) {
$routes->setRouteClass(DashedRoute::class);
$routes->connect('/:controller/:id', ['action' => 'view'])
->setPatterns(['id' => '[0-9]+']);
// Avant 3.5, utilisez le tableau d'options
$routes->connect(
'/:controller/:id',
['action' => 'view'],
['id' => '[0-9]+']
);
});
DashedRoute
va s’assurer que les paramètres
:controller
et :plugin
sont correctement mis en minuscule et avec des
tirets. Si vous avez besoin d’URLs en minuscule avec des underscores en migrant
d’une application CakePHP 2.x, vous pouvez utiliser à la place la classe
InflectedRoute
.
Les Patrons utilisés pour les éléments de route ne doivent pas contenir
de groupes capturés. S’ils le font, le Router ne va pas fonctionner
correctement.
/apples/5
est la même
que celle requêtant /apples/view/5
. Les deux appelleraient la méthode view()
de ApplesController. A l’intérieur de la méthode view()
, vous aurez besoin
d’accéder à l’ID passé à $this->request->getParam('id')
.Si vous avez un unique controller dans votre application et que vous ne voulez pas que le nom du controller apparaisse dans l’URL, vous pouvez mapper toutes les URLs aux actions dans votre controller. Par exemple, pour mapper toutes les URLs aux actions du controller
home
, par ex avoir des URLs
comme /demo
à la place de /home/demo
, vous pouvez faire ce qui suit:$routes->connect('/:action', ['controller' => 'Home']);
// Avant 3.5, utilisez le tableau d'options à la place de setPatterns()
$routes->connect(
'/:userShortcut',
['controller' => 'Teachers', 'action' => 'profile', 1],
)->setPatterns(['userShortcut' => '(?i:principal)']);
// Avant 3.5, utilisez le tableau d'options à la place de setPatterns()
$routes->connect(
'/:controller/:year/:month/:day',
['action' => 'index']
)->setPatterns([
'year' => '[12][0-9]{3}',
'month' => '0[1-9]|1[012]',
'day' => '0[1-9]|[12][0-9]|3[01]'
]);
Ensuite, nous spécifions quelques valeurs par défaut. Quel que soit le controller, nous voulons que l’action
index()
soit appelée.Finalement, nous spécifions quelques expressions régulières qui vont matcher les années, mois et jours sous forme numérique. Notez que les parenthèses (le groupement) ne sont pas supportées dans les expressions régulières. Vous pouvez toujours spécifier des alternatives, comme dessus, mais ne pas grouper avec les parenthèses.
Une fois définie, cette route va matcher
/articles/2007/02/01
,
/posts/2004/11/16
, gérant les requêtes
pour les actions index()
de ses controllers respectifs, avec les paramètres de
date dans $this->request->getParam()
.Il y a plusieurs éléments de route qui ont une signification spéciale dans CakePHP, et ne devraient pas être utilisés à moins que vous ne souhaitiez spécifiquement utiliser leur signification.
controller
Utilisé pour nommer le controller pour une route.action
Utilisé pour nommer l’action de controller pour une route.plugin
Utilisé pour nommer le plugin dans lequel un controller est localisé.prefix
Utilisé pour Prefix de Routage._ext
Utilisé pour Routing des Extensions de Fichier._base
Défini àfalse
pour retirer le chemin de base de l’URL générée. Si votre application n’est pas dans le répertoire racine, cette option peut être utilisée pour générer les URLs qui sont “liées à cake”._scheme
Défini pour créer les liens sur les schémas différents comme webcal ou ftp. Par défaut, au schéma courant._host
Définit l’hôte à utiliser pour le lien. Par défaut à l’hôte courant._port
Définit le port si vous avez besoin de créer les liens sur des ports non-standards._full
Si àtrue
, la constante FULL_BASE_URL va être ajoutée devant les URLS générées.#
Vous permet de définir les fragments de hash d’URL._ssl
Défini àtrue
pour convertir l’URL générée à https, oufalse
pour forcer http._method
Defini la méthode HTTP à utiliser. utile si vous travaillez avec Créer des Routes RESTful._name
Nom de route. Si vous avez configuré les routes nommées, vous pouvez utiliser cette clé pour les spécifier.
Aucun commentaire:
Enregistrer un commentaire
Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.