CakePHP - Routage

Dans ce chapitre, nous allons apprendre les sujets suivants liés au routage -

  • Introduction au routage
  • Itinéraires de connexion
  • Passer des arguments aux itinéraires
  • Générer des URL
  • Rediriger les URL

Introduction au routage

Dans cette section, nous verrons comment vous pouvez implémenter des routes, comment vous pouvez passer des arguments de l'URL à l'action du contrôleur, comment vous pouvez générer des URL et comment vous pouvez rediriger vers une URL spécifique. Normalement, les routes sont implémentées dans le fichierconfig/routes.php. Le routage peut être implémenté de deux manières -

  • méthode statique
  • constructeur de routes étendues

Voici un exemple présentant les deux types.

// Using the scoped route builder.
Router::scope('/', function ($routes) {
   $routes->connect('/', ['controller' => 'Articles', 'action' => 'index']);
});
// Using the static method.
Router::connect('/', ['controller' => 'Articles', 'action' => 'index']);

Les deux méthodes exécuteront la méthode d'index de ArticlesController. Sur les deux méthodes,scoped route builder donne de meilleures performances.

Itinéraires de connexion

Router::connect()La méthode est utilisée pour connecter les routes. Voici la syntaxe de la méthode -

static Cake\Routing\Router::connect($route, $defaults =[], $options =[])

Il y a trois arguments à la Router::connect() méthode -

  • Le premier argument concerne le modèle d'URL que vous souhaitez associer.

  • Le deuxième argument contient les valeurs par défaut de vos éléments d'itinéraire.

  • Le troisième argument contient des options pour l'itinéraire, qui contient généralement des règles d'expression régulière.

Voici le format de base d'un itinéraire -

$routes->connect(
   'URL template',
   ['default' => 'defaultValue'],
   ['option' => 'matchingRegex']
);

Exemple

Apportez des modifications au config/routes.php fichier comme indiqué ci-dessous.

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   // Register scoped middleware for in scopes.
      $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf');
   $builder->connect('/', ['controller' => 'Tests', 'action' => 'show']);
   $builder->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);
   $builder->fallbacks();
});

Créer un TestsController.php déposer à src/Controller/TestsController.php. Copiez le code suivant dans le fichier du contrôleur.

src/Controller/TestsController.php

<?php
declare(strict_types=1);
namespace App\Controller;
use Cake\Core\Configure;
use Cake\Http\Exception\ForbiddenException;
use Cake\Http\Exception\NotFoundException;
use Cake\Http\Response;
use Cake\View\Exception\MissingTemplateException;
class TestsController extends AppController {
   public function show()
   {
   }
}

Créer un dossier Tests en dessous de src/Template et sous ce dossier, créez un View fileappelé show.php. Copiez le code suivant dans ce fichier.

src/Template/Tests/show.php

<h1>This is CakePHP tutorial and this is an example of connecting routes.</h1>

Exécutez l'exemple ci-dessus en visitant l'URL suivante qui est disponible à http: // localhost / cakephp4 /

Production

L'URL ci-dessus donnera la sortie suivante.

Arguments passés

Les arguments passés sont les arguments passés dans l'URL. Ces arguments peuvent être passés à l'action du contrôleur. Ces arguments passés sont transmis à votre contrôleur de trois manières.

En tant qu'arguments de la méthode d'action

L'exemple suivant montre comment nous pouvons passer des arguments à l'action du contrôleur. Visitez l'URL suivante à l'adresse http: // localhost / cakephp4 / tests / value1 / value2

Cela correspondra à la ligne d'itinéraire suivante.

$builder->connect('tests/:arg1/:arg2', ['controller' => 'Tests', 'action' => 'show'],['pass' => ['arg1', 'arg2']]);

Ici, la valeur1 de l'URL sera affectée à arg1 et value2 sera affectée à arg2.

En tant que tableau indexé numériquement

Une fois que l'argument est passé à l'action du contrôleur, vous pouvez obtenir l'argument avec l'instruction suivante.

$args = $this->request->params[‘pass’]

Les arguments passés à l'action du contrôleur seront stockés dans la variable $ args.

Utilisation de la matrice de routage

L'argument peut également être passé à l'action par l'instruction suivante -

$routes->connect('/', ['controller' => 'Tests', 'action' => 'show',5,6]);

L'instruction ci-dessus passera deux arguments 5 et 6 à la méthode show () de TestController.

Exemple

Apportez des modifications au config/routes.php fichier comme indiqué dans le programme suivant.

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
// Register scoped middleware for in scopes.
$builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf');
   $builder->connect('tests/:arg1/:arg2', ['controller' => 'Tests', 'action' => 'show'],['pass' => ['arg1', 'arg2']]);
   $builder->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);
   $builder->fallbacks();
});

Créer un TestsController.php déposer à src/Controller/TestsController.php. Copiez le code suivant dans le fichier du contrôleur.

src/Controller/TestsController.php

<?php
declare(strict_types=1);
namespace App\Controller;
use Cake\Core\Configure;
use Cake\Http\Exception\ForbiddenException;
use Cake\Http\Exception\NotFoundException;
use Cake\Http\Response;
use Cake\View\Exception\MissingTemplateException;
class TestsController extends AppController {
public function show($arg1, $arg2) {
      $this->set('argument1',$arg1);
      $this->set('argument2',$arg2);
   }
}

Créer un dossier Tests à src/Template et sous ce dossier, créez un Viewfichier appelé show.php. Copiez le code suivant dans ce fichier.

src/Template/Tests/show.php.

<h1>This is CakePHP tutorial and this is an example of Passed arguments.</h1>
<?php
   echo "Argument-1:".$argument1."<br/>";
   echo "Argument-2:".$argument2."<br/>";
?>

Exécutez l'exemple ci-dessus en visitant l'URL suivante http: // localhost / cakephp4 / tests / Virat / Kunal

Production

Lors de l'exécution, l'URL ci-dessus produira la sortie suivante.

Générer des URL

C'est une fonctionnalité intéressante de CakePHP. En utilisant les URL générées, nous pouvons facilement changer la structure de l'URL dans l'application sans modifier tout le code.

url( string|array|null $url null , boolean $full false )

La fonction ci-dessus prendra deux arguments -

  • Le premier argument est un tableau spécifiant l'un des éléments suivants - 'controller', 'action', 'plugin'. En outre, vous pouvez fournir des éléments routés ou des paramètres de chaîne de requête. S'il s'agit d'une chaîne, il peut recevoir le nom de n'importe quelle chaîne d'url valide.

  • Si c'est vrai, l'URL de base complète sera ajoutée au résultat. La valeur par défaut est false.

Exemple

Apportez des modifications au config/routes.php fichier comme indiqué dans le programme suivant.

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   // Register scoped middleware for in scopes.
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf');
   $builder->connect('/generate',['controller'=>'Generates','action'=>'show']);
   $builder->fallbacks();
});

Créer un GeneratesController.php déposer à src/Controller/GeneratesController.php. Copiez le code suivant dans le fichier du contrôleur.

src/Controller/GeneratesController.php

<?php
declare(strict_types=1);
namespace App\Controller;
21
use Cake\Core\Configure;
use Cake\Http\Exception\ForbiddenException;
use Cake\Http\Exception\NotFoundException;
use Cake\Http\Response;
use Cake\View\Exception\MissingTemplateException;
class GeneratesController extends AppController {
   public function show()
   {
   }
}

Créer un dossier Generates at src/Template et sous ce dossier, créez un Viewfichier appelé show.php. Copiez le code suivant dans ce fichier.

src/Template/Generates/show.php

<h1>This is CakePHP tutorial and this is an example of Generating URLs<h1>

Exécutez l'exemple ci-dessus en visitant l'URL suivante -

http: // localhost / cakephp4 / generate

Production

L'URL ci-dessus produira la sortie suivante -

Rediriger le routage

Le routage de redirection est utile lorsque nous voulons informer les applications clientes que cette URL a été déplacée. L'URL peut être redirigée à l'aide de la fonction suivante -

static Cake\Routing\Router::redirect($route, $url, $options =[])

Il y a trois arguments à la fonction ci-dessus comme suit -

  • Une chaîne décrivant le modèle de l'itinéraire.

  • Une URL vers laquelle rediriger.

  • Un tableau correspondant aux éléments nommés dans l'itinéraire vers des expressions régulières auxquelles cet élément doit correspondre.

Exemple

Apportez des modifications au config/routes.phpfichier comme indiqué ci-dessous. Ici, nous avons utilisé des contrôleurs créés précédemment.

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   // Register scoped middleware for in scopes.
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf');
   $builder->connect('/generate',['controller'=>'Generates','action'=>'show']);
   $builder->redirect('/redirect','https://tutorialspoint.com/');
   $builder->fallbacks();
});

Exécutez l'exemple ci-dessus en visitant les URL suivantes.

URL 1 - http: // localhost / cakephp4 / generate

Sortie pour l'URL 1

URL 2 - http: // localhost / cakephp4 / redirect

Sortie pour l'URL 2

Vous serez redirigé vers https://tutorialspoint.com