• Aucun résultat trouvé

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 $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 à Ca- kePHP 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]+'] );

Cet exemple simple montre comment créer une manière rapide de voir les models à partir de tout controller en éla- borant une URL qui ressemble à /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 para- mè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]+'] ); });

La classe spéciale 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.

Note : 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.

Une fois que cette route a été définie, la requête /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']);

Si vous souhaitez fournir une URL non sensible à la casse, vous pouvez utiliser les modificateurs en ligne d’expression régulière :

// Avant 3.5, utilisez le tableau d'options à la place de setPatterns() $routes->connect(

'/:userShortcut',

['controller' => 'Teachers', 'action' => 'profile', 1], )->setPatterns(['userShortcut' => '(?i:principal)']);

Un exemple de plus, et vous serez un pro du routing :

// 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]' ]);

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 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é pourPrefix de Routage.

— _ext Utilisé pourRouting 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, ou false pour forcer http.

— _method Defini la méthode HTTP à utiliser. utile si vous travaillez avecCré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.