当前位置: 首页 > 文档资料 > CakePHP 入门教程 >

路由(Routing)

优质
小牛编辑
133浏览
2023-12-01

路由将您的URL映射到特定控制器的操作。 在本节中,我们将了解如何实现路由,如何将参数从URL传递到控制器的操作,如何生成URL以及如何重定向到特定URL。 通常,路由在文件config/routes.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的索引方法。 在两种方法中, scoped route builder提供了更好的性能。

连接路线

Router::connect()方法用于连接路由。 以下是该方法的语法 -

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

Router::connect()方法有三个参数 -

  • 第一个参数是您希望匹配的URL模板。

  • 第二个参数包含路径元素的默认值。

  • 第三个参数包含通常包含正则表达式规则的路由选项。

这是路线的基本格式 -

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

例子 (Example)

在config/routes.php文件中进行更改,如下所示。

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();

src/Controller/TestsController.php创建一个TestsController.php文件。 将以下代码复制到控制器文件中。

src/Controller/TestsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   class TestsController extends AppController{
      public function index(){
      }
   }
?>

创建一个文件夹在src/TemplateTests并在该文件夹下创建一个名为index.ctpView file 。 复制该文件中的以下代码。

src/Template/Tests/index.ctp

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

通过访问以下URL执行上述示例。

http://localhost:85/CakePHP/

上面的URL将产生以下输出。

路由

传递参数

传递的参数是在URL中传递的参数。 这些参数可以传递给控制器​​的操作。 这些传递的参数以三种方式提供给您的控制器。

作为action方法的参数

下面的示例显示了我们如何将参数传递给控制器​​的操作。

访问以下URL - http://localhost:85/CakePHP/tests/value1/value2

这将匹配以下路线。

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

这里,URL中的value1将分配给arg1,value2将分配给arg2。

作为数字索引数组

将参数传递给控制器​​的操作后,您可以使用以下语句获取参数。

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

传递给控制器​​操作的参数将存储在$args变量中。

使用路由数组

该论点也可以通过以下声明传递给行动 -

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

上面的语句将两个参数5和6传递给TestController's index()方法。

例子 (Example)

config/routes.php文件中进行更改,如以下程序所示。

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();

src/Controller/TestsController.php创建一个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);
      }
   }
?>

创建文件夹在src/Template Tests并在该文件夹下创建一个名为index.ctpView文件。 复制该文件中的以下代码。

src/Template/Tests/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://localhost:85/CakePHP/tests/Virat/Kunal

执行时,上面的URL将产生以下输出。

CakePHP路由