In diesem Kapitel werden wir die folgenden Themen im Zusammenhang mit dem Routing lernen −
In diesem Abschnitt erfahren Sie, wie Sie Routen implementieren, wie Sie Argumente von der URL an die Aktion des Controllers übergeben, wie Sie URLs generieren und wie Sie zu einer bestimmten URL umleiten können. Normalerweise werden Routen in der Datei config/routes.php implementiert. Routing kann auf zwei Arten implementiert werden −
Hier ist ein Beispiel, das beide Typen darstellt.
// 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']);
Beide Methoden führen die Indexmethode von ArticlesController aus. Von den beiden Methoden bietet Scoped Route Builder eine bessere Leistung.
Router::connect() wird zum Verbinden von Routen verwendet. Das Folgende ist die Syntax der Methode −
static Cake\Routing\Router::connect($route, $defaults =[], $options =[])
Es gibt drei Argumente für die Methode Router::connect() −
Das erste Argument bezieht sich auf die URL-Vorlage, die Sie abgleichen möchten.
Das zweite Argument enthält Standardwerte für Ihre Routenelemente.
Das dritte Argument enthält Optionen für die Route, die im Allgemeinen Regeln für reguläre Ausdrücke enthält.
Hier ist das Grundformat einer Route −
$routes->connect( 'URL template', ['default' => 'defaultValue'], ['option' => 'matchingRegex'] );
Nehmen Sie Änderungen in der Datei config/routes.php vor, wie unten gezeigt.
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(); });
Erstellen Sie eine TestsController.php-Datei unter src/Controller/TestsController.php. Kopieren Sie den folgenden Code in die Controller-Datei.
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() { } }
Erstellen Sie einen Ordner Tests unter src/Template und erstellen Sie unter diesem Ordner eine Ansichtsdatei mit dem Namen show.php. Kopieren Sie den folgenden Code in diese Datei.
src/Template/Tests/show.php
<h1>This is CakePHP tutorial and this is an example of connecting routes.</h1>
Führen Sie das obige Beispiel aus, indem Sie die folgende URL besuchen, die unter http://localhost/cakephp4/ verfügbar ist.
Die obige URL liefert die folgende Ausgabe.
Übergebene Argumente sind die Argumente, die in der URL übergeben werden. Diese Argumente können an die Aktion des Controllers übergeben werden. Diese übergebenen Argumente werden Ihrem Controller auf drei Arten übergeben.
Das folgende Beispiel zeigt, wie wir Argumente an die Aktion des Controllers übergeben können. Besuchen Sie die folgende URL unter http://localhost/cakephp4/tests/value1/value2
Dies entspricht der folgenden Routenlinie.
$builder->connect('tests/:arg1/:arg2', ['controller' => 'Tests', 'action' => 'show'],['pass' => ['arg1', 'arg2']]);
Hier wird der Wert1 von der URL arg1 und der Wert2 arg2 zugewiesen.
Sobald das Argument an die Aktion des Controllers übergeben wurde, können Sie das Argument mit der folgenden Anweisung abrufen.
$args = $this->request->params[‘pass’]
Die an die Aktion des Controllers übergebenen Argumente werden in der Variablen $args gespeichert.
Das Argument kann auch durch die folgende Anweisung an eine Aktion übergeben werden: −
$routes->connect('/', ['controller' => 'Tests', 'action' => 'show',5,6]);
Die obige Anweisung übergibt zwei Argumente 5 und 6 an die show()-Methode von TestController.
Nehmen Sie Änderungen in der Datei config/routes.php vor, wie im folgenden Programm gezeigt.
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(); });
Erstellen Sie eine TestsController.php-Datei unter src/Controller/TestsController.php. Kopieren Sie den folgenden Code in die Controller-Datei.
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); } }
Erstellen Sie einen Ordner Tests unter src/Template und erstellen Sie unter diesem Ordner eine View-Datei mit dem Namen show.php. Kopieren Sie den folgenden Code in diese Datei.
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/>"; ?>
Führen Sie das obige Beispiel aus, indem Sie die folgende URL besuchen: http://localhost/cakephp4/tests/Virat/Kunal
Bei der Ausführung erzeugt die obige URL die folgende Ausgabe.
Dies ist eine coole Funktion von CakePHP. Mithilfe der generierten URLs können wir die URL-Struktur in der Anwendung problemlos ändern, ohne den gesamten Code zu ändern.
url( string|array|null $url null , boolean $full false )
Die obige Funktion benötigt zwei Argumente −
Das erste Argument ist ein Array, das eines der folgenden Elemente angibt: 'Controller', 'Aktion', 'Plugin'. Darüber hinaus können Sie geroutete Elemente oder Abfragezeichenfolgenparameter bereitstellen. Bei einer Zeichenfolge kann der Name einer beliebigen gültigen URL-Zeichenfolge angegeben werden.
Wenn „true“, wird die vollständige Basis-URL dem Ergebnis vorangestellt. Der Standardwert ist false.
Nehmen Sie Änderungen in der Datei config/routes.php vor, wie im folgenden Programm gezeigt.
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
Das obige ist der detaillierte Inhalt vonCakePHP-Routing. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!