路由(Routing)
路由将您的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/Template下Tests并在该文件夹下创建一个名为index.ctp的View 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.ctp的View文件。 复制该文件中的以下代码。
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将产生以下输出。