Penghalaan CakePHP

王林
王林asal
2024-09-10 17:25:07550semak imbas

Dalam bab ini, kita akan mempelajari topik berikut yang berkaitan dengan penghalaan −

  • Pengenalan kepada Penghalaan
  • Menghubungkan Laluan
  • Menyalurkan Hujah ke Laluan
  • Menjana url
  • Ubah hala url

Pengenalan kepada 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 −

  • kaedah statik
  • pembina laluan berskop

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.

Menghubungkan Laluan

Kaedah

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']
);

Contoh

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/

Output

URL di atas akan menghasilkan output berikut.

Above URL

Lulus Hujah

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.

Sebagai hujah kepada kaedah tindakan

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.

Sebagai tatasusunan yang diindeks secara berangka

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.

Menggunakan tatasusunan penghalaan

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.

Contoh

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

Output

Setelah dilaksanakan, URL di atas akan menghasilkan output berikut.

Passed Argument

Menjana URL

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.

Contoh

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

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

Atas ialah kandungan terperinci Penghalaan CakePHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Konfigurasi Projek CakePHPArtikel seterusnya:Konfigurasi Projek CakePHP