Routage CakePHP

王林
王林original
2024-09-10 17:25:07550parcourir

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

  • Introduction au routage
  • Itinéraires de connexion
  • Passer des arguments aux routes
  • Générer des URL
  • URL de redirection

Introduction au routage

Dans cette section, nous verrons comment vous pouvez implémenter des routes, comment vous pouvez transmettre 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 fichier config/routes.php. Le routage peut être implémenté de deux manières −

  • méthode statique
  • Créateur d'itinéraires ciblés

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. Parmi les deux méthodes, le créateur de routes ciblées offre de meilleures performances.

Itinéraires de connexion

La méthode

Router::connect() 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 dans la méthode Router::connect()

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

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

  • Le troisième argument contient des options pour la route, 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 dans le fichier config/routes.php 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éez un fichier TestsController.php dans 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éez un dossier Tests sous src/Template et sous ce dossier, créez un View file 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 connecting routes.</h1>

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

Sortie

L'URL ci-dessus donnera le résultat suivant.

Above URL

Arguments passés

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

Comme arguments de la méthode d'action

L'exemple suivant montre comment nous pouvons transmettre des arguments à l'action du contrôleur. Visitez l'URL suivante à 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 attribuée à arg1 et la valeur2 sera attribuée à arg2.

Comme tableau indexé numériquement

Une fois l'argument 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 d'un tableau 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 transmettra deux arguments 5 et 6 à la méthode show() de TestController.

Exemple

Apportez des modifications au fichier config/routes.php 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éez un fichier TestsController.php dans 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éez un dossier Tests dans src/Template et sous ce dossier, créez un fichier View 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

Sortie

Lors de l'exécution, l'URL ci-dessus produira le résultat suivant.

Passed Argument

Générer des URL

C'est une fonctionnalité intéressante de CakePHP. En utilisant les URL générées, nous pouvons facilement modifier 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 - 'contrôleur', 'action', 'plugin'. De plus, 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, on peut lui donner 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 fausse.

Exemple

Apportez des modifications au fichier config/routes.php 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();
});

Create a GeneratesController.php file at src/Controller/GeneratesController.php. Copy the following code in the controller file.

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()
   {
   }
}

Create a folder Generates at src/Template and under that folder, create a View file called show.php. Copy the following code in that file.

src/Template/Generates/show.php

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

Execute the above example by visiting the following URL −

http://localhost/cakephp4/generate

Output

The above URL will produce the following output −

Generating URL

Redirect Routing

Redirect routing is useful, when we want to inform client applications that, this URL has been moved. The URL can be redirected using the following function −

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

There are three arguments to the above function as follows −

  • A string describing the template of the route.

  • A URL to redirect to.

  • An array matching the named elements in the route to regular expressions which that element should match.

Example

Make Changes in the config/routes.php file as shown below. Here, we have used controllers that were created previously.

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();
});

Execute the above example by visiting the following URLs.

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

Output for URL 1

Execute URL

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

Output for URL 2

You will be redirected to https://tutorialspoint.com

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn