Учебники

CakePHP — Маршрутизация

Маршрутизация отображает ваш URL на конкретное действие контроллера. В этом разделе мы увидим, как вы можете реализовать маршруты, как вы можете передавать аргументы из URL в действия контроллера, как вы можете генерировать URL и как вы можете перенаправить на определенный URL. Обычно маршруты реализуются в файле config / rout.php . Маршрутизация может быть реализована двумя способами:

  • статический метод
  • строитель трассы

Вот пример, представляющий оба типа.

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

Оба метода будут выполнять индексный метод ArticlesController . Из двух предложенных методов построитель маршрутов дает лучшую производительность.

Подключение маршрутов

Метод Router :: connect () используется для соединения маршрутов. Ниже приведен синтаксис метода —

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

У метода Router :: connect () есть три аргумента —

  • Первый аргумент для шаблона URL, который вы хотите сопоставить.

  • Второй аргумент содержит значения по умолчанию для ваших элементов маршрута.

  • Третий аргумент содержит параметры для маршрута, который обычно содержит правила регулярных выражений.

Первый аргумент для шаблона URL, который вы хотите сопоставить.

Второй аргумент содержит значения по умолчанию для ваших элементов маршрута.

Третий аргумент содержит параметры для маршрута, который обычно содержит правила регулярных выражений.

Вот основной формат маршрута —

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

пример

Внесите изменения в файл config / rout.php, как показано ниже.

конфиг / 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();

Создайте файл TestsController.php в src / Controller / TestsController.php . Скопируйте следующий код в файл контроллера.

SRC / Controller / TestsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;

   class TestsController extends AppController{
      public function index(){
      }
   }
?>

Создайте папку Tests в src / Template и в этой папке создайте файл View с именем index.ctp . Скопируйте следующий код в этот файл.

SRC / Template / Тесты / index.ctp

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

Выполните приведенный выше пример, посетив следующий URL.

HTTP: // локальный: 85 / CakePHP /

Приведенный выше URL приведет к следующему выводу.

маршрутизация

Прошло аргументы

Переданные аргументы — это аргументы, которые передаются в URL. Эти аргументы могут быть переданы в действие контроллера. Эти переданные аргументы передаются вашему контроллеру тремя способами.

В качестве аргументов метода действия

Следующий пример показывает, как мы можем передавать аргументы действию контроллера.

Посетите следующий URL — http: // localhost: 85 / CakePHP / tests / value1 / value2

Это будет соответствовать следующей линии маршрута.

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

Здесь значение1 из URL будет присвоено arg1, а значение2 будет присвоено arg2.

Как численно индексированный массив

Как только аргумент передается действию контроллера, вы можете получить аргумент с помощью следующего оператора.

$args = $this->request->params[‘pass’]

Аргументы, передаваемые действию контроллера, будут храниться в переменной $ args .

Использование массива маршрутизации

Аргумент также может быть передан в действие следующим оператором —

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

Вышеприведенный оператор передаст два аргумента 5 и 6 методу TestController index () .

пример

Внесите изменения в файл config / rout.php, как показано в следующей программе.

конфиг / 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();

Создайте файл TestsController.php в src / Controller / TestsController.php . Скопируйте следующий код в файл контроллера.

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);
      }
   }
?>

Создайте папку Tests в src / Template и в этой папке создайте файл View с именем index.ctp . Скопируйте следующий код в этот файл.

SRC / Template / Тесты / index.ctp

This is CakePHP tutorial and this is an example of Passed arguments.<br />
Argument-1: <?=$argument1?><br />
Argument-2: <?=$argument2?><br />

Выполните приведенный выше пример, посетив следующий URL.

HTTP: // локальный: 85 / CakePHP / тесты / Virat / Кунал

После выполнения вышеуказанный URL даст следующий вывод.