Dalam bab ini, kita akan mempelajari topik berikut yang berkaitan dengan penghalaan −
Dalam bahagian ini, kami akan melihat cara anda boleh melaksanakan laluan, cara anda boleh menghantar hujah daripada URL kepada tindakan pengawal, cara anda boleh menjana URL dan cara anda boleh mengubah hala ke URL tertentu. Biasanya, laluan dilaksanakan dalam fail config/routes.php. Penghalaan boleh dilaksanakan dalam dua cara −
Di sini, ialah contoh yang membentangkan kedua-dua jenis.
// 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']);
Kedua-dua kaedah akan melaksanakan kaedah indeks ArticleController. Daripada dua kaedah tersebut, pembina laluan berskop memberikan prestasi yang lebih baik.
Penghala::connect() digunakan untuk menyambung laluan. Berikut ialah sintaks kaedah −
static Cake\Routing\Router::connect($route, $defaults =[], $options =[])
Terdapat tiga argumen untuk kaedah Router::connect() −
Argumen pertama adalah untuk templat URL yang ingin anda padankan.
Argumen kedua mengandungi nilai lalai untuk elemen laluan anda.
Argumen ketiga mengandungi pilihan untuk laluan, yang biasanya mengandungi peraturan ungkapan biasa.
Di sini, ialah format asas laluan −
$routes->connect( 'URL template', ['default' => 'defaultValue'], ['option' => 'matchingRegex'] );
Buat perubahan dalam fail config/routes.php seperti yang ditunjukkan di bawah.
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(); });
Buat fail TestsController.php di src/Controller/TestsController.php. Salin kod berikut dalam fail pengawal.
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() { } }
Buat folder Ujian di bawah src/Template dan di bawah folder itu, buat Lihat fail yang dipanggil show.php. Salin kod berikut dalam fail itu.
src/Templat/Tests/show.php
<h1>This is CakePHP tutorial and this is an example of connecting routes.</h1>
Laksanakan contoh di atas dengan melawati URL berikut yang boleh didapati di http://localhost/cakephp4/
URL di atas akan menghasilkan output berikut.
Argumen yang diluluskan ialah argumen yang dihantar dalam URL. Argumen ini boleh dihantar kepada tindakan pengawal. Argumen yang diluluskan ini diberikan kepada pengawal anda dalam tiga cara.
Contoh berikut menunjukkan, cara kita boleh menyampaikan hujah kepada tindakan pengawal. Lawati URL berikut di http://localhost/cakephp4/tests/value1/value2
Ini akan sepadan dengan garis laluan berikut.
$builder->connect('tests/:arg1/:arg2', ['controller' => 'Tests', 'action' => 'show'],['pass' => ['arg1', 'arg2']]);
Di sini, nilai1 daripada URL akan diberikan kepada arg1 dan nilai2 akan diberikan kepada arg2.
Setelah hujah diserahkan kepada tindakan pengawal, anda boleh mendapatkan hujah dengan pernyataan berikut.
$args = $this->request->params[‘pass’]
Argumen yang dihantar kepada tindakan pengawal akan disimpan dalam pembolehubah $args.
Hujah juga boleh diserahkan kepada tindakan dengan pernyataan berikut −
$routes->connect('/', ['controller' => 'Tests', 'action' => 'show',5,6]);
Pernyataan di atas akan memberikan dua hujah 5 dan 6 kepada kaedah show() TestController.
Buat Perubahan dalam fail config/routes.php seperti yang ditunjukkan dalam program berikut.
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(); });
Buat fail TestsController.php di src/Controller/TestsController.php. Salin kod berikut dalam fail pengawal.
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); } }
Buat folder Ujian di src/Template dan di bawah folder itu buat fail View yang dipanggil show.php. Salin kod berikut dalam fail itu.
src/Templat/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/>"; ?>
Laksanakan contoh di atas dengan melawati URL berikut http://localhost/cakephp4/tests/Virat/Kunal
Setelah dilaksanakan, URL di atas akan menghasilkan output berikut.
Ini adalah ciri hebat CakePHP. Menggunakan URL yang dijana, kami boleh menukar struktur URL dalam aplikasi dengan mudah tanpa mengubah suai keseluruhan kod.
url( string|array|null $url null , boolean $full false )
Fungsi di atas akan mengambil dua hujah −
Argumen pertama ialah tatasusunan yang menyatakan mana-mana yang berikut - 'pengawal', 'tindakan', 'pemalam'. Selain itu, anda boleh menyediakan elemen yang dihalakan atau parameter rentetan pertanyaan. Jika rentetan, ia boleh diberi nama mana-mana rentetan url yang sah.
Jika benar, URL asas penuh akan ditambahkan pada hasil carian. Lalai adalah palsu.
Buat Perubahan dalam fail config/routes.php seperti yang ditunjukkan dalam program berikut.
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
Atas ialah kandungan terperinci Penghalaan CakePHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!