Dans ce chapitre, nous allons apprendre les sujets suivants liés 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 −
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.
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'] );
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/
L'URL ci-dessus donnera le résultat suivant.
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.
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.
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.
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.
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
Lors de l'exécution, l'URL ci-dessus produira le résultat suivant.
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.
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
The above URL will produce the following output −
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.
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
URL 2 − http://localhost/cakephp4/redirect
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!