CakePHP路由

2020-09-07 11:06 更新

路由将您的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的index方法。两种方法中域内路由生成器提供更好的性能。

连接路由

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

static CakeRoutingRouter::connect($route, $defaults =[], $options =[])

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

  • 第一个参数是要匹配的URL模板。

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

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

这里是一个路由的基本格式 -

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

修改如下图config/routes.php文件。

config/routes.php文件

<?php
   use CakeCorePlugin;
   use CakeRoutingRouteBuilder;
   use CakeRoutingRouter;

   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文件。复制以下代码至其中。

src/Controller/TestsController.php

<?php
   namespace AppController;
   use AppControllerAppController;

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

src/Template目录下创建一个文件夹Tests,并在Tests文件夹下创建一个名为index.ctp一个视图文件 。复制以下代码至此文件中。

src/Template/Tests/index.ctp

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

通过访问以下网址执行上面的例子。

http//localhost:85/CakePHP/

上面的URL将显示如下页面。


传递的参数

传递的参数是指在URL中传递的参数,这些参数可以传递给控制器​行为。这些参数有3种方法传递给控制器。

作为参数传递给操作方法

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

请访问以下网址- http://localhost:85/CakePHP/Tests/value1/value2

这将匹配以下路由线路。

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

在这里,URL中的value1将被分配给参数1,value2将被分配给参数2。

作为数字索引数组

一旦参数被传递给控制器​​的操作方法,你可以用下面的语法获取参数。

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

传递给控制器操作方法的参数将被存储在$args变量里。

使用路由数组

参数也可以由以下语句传递到操作方法 -

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

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

修改以下所示config / routes.php文件。

配置/ routes.php文件

<?php
   use CakeCorePlugin;
   use CakeRoutingRouteBuilder;
   use CakeRoutingRouter;

   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文件。复制以下代码至此文件中。

src/Controller/TestsController.php

<?php
   namespace AppController;
   use AppControllerAppController;

   class TestsController extends AppController{
      public function index($arg1,$arg2){
         $this->set('argument1',$arg1);
         $this->set('argument2',$arg2);
      }
   }
?>

src/Template目录下创建一个文件夹Tests,并在Tests下创建一个名为index.ctp一个视图文件。复制以下代码至其中。

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 />

通过访问以下网址执行上面的例子。

http://localhost:85/CakePHP/tests/Virat/Kunal

以上URL会显示以下页面。



以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号