Thứ Tư, 5 tháng 9, 2018

CakePHP - Định tuyến

Học lập trình PHP định tuyến ánh xạ URL của bạn đến hành động của bộ điều khiển cụ thể. Trong phần này, chúng ta sẽ thấy cách bạn có thể triển khai các tuyến đường, cách bạn có thể chuyển đối số từ URL sang hành động của bộ điều khiển, cách bạn có thể tạo URL và cách bạn có thể chuyển hướng đến một URL cụ thể.

Thông thường, các tuyến được thực hiện trong tệp config / routes.php . Định tuyến có thể được thực hiện theo hai cách

phương pháp tĩnh

người xây dựng tuyến đường rải rác

Đây là một ví dụ trình bày cả hai loại.

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

Cả hai phương thức sẽ thực thi phương thức index của ArticlesController . Trong số hai phương pháp xây dựng tuyến đường có phạm vi cho hiệu suất tốt hơn.

Kết nối tuyến đường

Router :: connect () phương pháp được sử dụng để kết nối các tuyến đường. Sau đây là cú pháp của phương thức

static Cake\Routing\Router::connect($route, $defaults =[], $options =[])

Có ba đối số cho phương thức Router :: connect ()

Đối số đầu tiên là cho mẫu URL bạn muốn khớp.

Đối số thứ hai chứa các giá trị mặc định cho các phần tử tuyến đường của bạn.

Đối số thứ ba chứa các tùy chọn cho tuyến đường thường chứa các quy tắc biểu thức chính quy.

Đây là định dạng cơ bản của tuyến đường

$routes->connect(
   'URL template',
   ['default' => 'defaultValue'],
   ['option' => 'matchingRegex']
);

Thí dụ

Thực hiện các thay đổi trong tệp config / routes.php như hình dưới đây.

config / routes.php
<?php
   use Cake\Core\Plugin;
   use Cake\Routing\RouteBuilder;
   use Cake\Routing\Router;

   Router::defaultRouteClass('DashedRoute');
   Router::scope('/', function (RouteBuilder $routes) {
      $routes->connect('/', ['controller' => 'Tests', 'action' => 'index']);
      $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);
      $routes->fallbacks('DashedRoute');
   });
   Plugin::routes();
Tạo một tệp TestsController.php tại src / Controller / TestsController.php . Sao chép mã sau trong tệp bộ điều khiển.

src / Controller / TestsController.php
<?php
   namespace App\Controller;
   use App\Controller\AppController;

   class TestsController extends AppController{
      public function index(){
      }
   }
?>
Tạo thư mục Thử nghiệm dưới src / Mẫu và dưới thư mục đó tạo tệp Xem có tên index.ctp . Sao chép mã sau vào tệp đó.

src / Mẫu / Bài kiểm tra / index.ctp

This is CakePHP tutorial and this is an example of connecting routes.

Thực hiện ví dụ trên bằng cách truy cập URL sau.

http: // localhost: 85 / PHP /

URL trên sẽ mang lại kết quả sau.

Học lập trình PHP

Đối số đã vượt qua


Đối số được truyền là các đối số được chuyển trong URL. Các đối số này có thể được chuyển đến hành động của bộ điều khiển. Các đối số đã truyền này được trao cho bộ điều khiển của bạn theo ba cách.

Làm đối số cho phương thức hành động

Ví dụ sau đây cho thấy cách chúng ta có thể truyền đối số cho hành động của bộ điều khiển.

Truy cập URL sau - http: // localhost: 85 /PHP / tests / value1 / value2

Điều này sẽ khớp với tuyến đường sau.

$routes->connect('tests/:arg1/:arg2', ['controller' => 'Tests', 'action' =>
   'index'],['pass' => ['arg1', 'arg2']]);

Ở đây giá trị 1 từ URL sẽ được gán cho arg1 và value2 sẽ được gán cho arg2.

Như mảng được lập chỉ mục số

Khi đối số được truyền cho hành động của bộ điều khiển, bạn có thể nhận được đối số với câu lệnh sau.
$args = $this->request->params[‘pass’]
Các đối số được truyền cho hành động của bộ điều khiển sẽ được lưu trữ trong biến $ args .

Sử dụng mảng định tuyến

Đối số cũng có thể được chuyển đến hành động bằng câu lệnh sau

$routes->connect('/', ['controller' => 'Tests', 'action' => 'index',5,6]);

Câu lệnh trên sẽ chuyển hai đối số 5 và 6 đến phương thức index () của TestController .

Thí dụ

Thực hiện các thay đổi trong tệp config / routes.php như được hiển thị trong chương trình sau.

config / routes.php
<?php
   use Cake\Core\Plugin;
   use Cake\Routing\RouteBuilder;
   use Cake\Routing\Router;

   Router::defaultRouteClass('DashedRoute');
   Router::scope('/', function (RouteBuilder $routes) {
      $routes->connect('tests/:arg1/:arg2', ['controller' => 'Tests', 'action'=> 
         'index'],['pass' =>['arg1', 'arg2']]);
      
      $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);
      $routes->fallbacks('DashedRoute');
   });

   Plugin::routes();
Tạo một tệp TestsController.php tại src / Controller / TestsController.php . Sao chép mã sau trong tệp bộ điều khiển.

src / Controller / TestsController.php
<?php
   namespace App\Controller;
   use App\Controller\AppController;

   class TestsController extends AppController{
      public function index($arg1,$arg2){
         $this->set('argument1',$arg1);
         $this->set('argument2',$arg2);
      }
   }
?>
Tạo một thư mục Các thử nghiệm tại src / Template và dưới thư mục đó tạo một tệp Xem có tên là index.ctp . Sao chép mã sau vào tệp đó.

src / Mẫu / Bài kiểm tra / index.ctp

This is CakePHP tutorial and this is an example of Passed arguments.<br />
Argument-1: <?=$argument1?><br />
Argument-2: <?=$argument2?><br />
Thực hiện ví dụ trên bằng cách truy cập URL sau.

http: // localhost: 85 / PHP / kiểm tra / Virat / Kunal

Khi thực hiện, URL trên sẽ tạo ra kết quả sau.

Học lập trình PHP
Học lập trình PHP

Không có nhận xét nào:

Đăng nhận xét

lập trình PHP cho các nhà phát triển PERL

Chương này sẽ liệt kê những điểm tương đồng và khác biệt chính giữa PHP và PERL. Điều này sẽ giúp các nhà phát triển PERL hiểu PHP rất nhanh...