📅  最后修改于: 2023-12-03 14:59:52.852000             🧑  作者: Mango
在 CakePHP 中,路由是指将 URL 映射到控制器和动作的过程。路由可以让我们自定义 URL,提高网站的易用性和搜索引擎优化。
CakePHP 提供了强大的路由功能,可以通过配置路由规则来实现 URL 的可读性和美观性,还可以处理多语言、基于子域名的路由和分页等需求。
在 CakePHP 中,路由配置位于 config/routes.php
文件中。路由规则有两个主要参数:URL 和目标,它们分别对应请求的 URL 和控制器/动作的执行结果。
下面是一个简单的路由规则示例:
$routes->connect('/articles/:id', ['controller' => 'Articles', 'action' => 'view'], ['id' => '\d+', 'pass' => ['id']]);
该规则的含义是,当用户访问 /articles/123
时,将调用 ArticlesController
的 view
动作,并将 id
参数设置为 123
。
路由规则中的 :id
是一个参数占位符,它会匹配任意数字。['id' => '\d+']
表示只匹配数字,防止恶意输入。
通过路由规则,我们可以让 URL 变得更加简单易记,例如:
/articles/view/123
映射为 /articles/123
/users/login
映射为 /login
/zh/articles
映射为 /articles?lang=zh
路由规则中还有一些选项,用于进一步控制 URL 的匹配和生成。下面是常用的选项:
pass
:传递参数到控制器动作,如 'pass' => ['id']
controller
:指定控制器名称,如 'controller' => 'Articles'
action
:指定动作名称,如 'action' => 'view'
plugin
:指定插件名称,如 'plugin' => 'MyPlugin'
prefix
:指定 URL 前缀,如 'prefix' => 'admin'
plugin
:指定插件名称,如 'plugin' => 'MyPlugin'
_name
:指定路由名称,方便生成 URL,如 '_name' => 'article'
路由组用于将多个相关的路由规则组合在一起,方便管理和维护。例如:
$routes->group('/admin', function ($routes) {
// 后台用户路由
$routes->connect('/users', ['controller' => 'Users']);
$routes->connect('/users/:action/*', ['controller' => 'Users']);
// 后台文章路由
$routes->connect('/articles', ['controller' => 'Articles']);
$routes->connect('/articles/:action/*', ['controller' => 'Articles']);
});
该路由组中定义了两个控制器的路由规则,它们都以 /admin
开头。$routes
参数是一个闭包函数,其中传入的是父级路由器,我们可以在其中定义子规则。
路由组还可以嵌套使用,实现更加复杂的路由配置。
通过路由配置,我们可以将 URL 映射到控制器和动作,也可以将控制器和动作反向映射到 URL。这个过程叫做 URL 生成。
在 CakePHP 中,URL 生成使用 Router::url()
方法。例如:
$url = Router::url(['controller' => 'Articles', 'action' => 'view', 123]);
// 生成的 URL 是 /articles/view/123
该方法接受一个数组参数,包含控制器、动作和其他参数,根据路由规则生成 URL。
如果定义了路由规则名称(通过 _name
选项),可以通过 Router::reverseRoute()
方法生成 URL。
路由是 CakePHP 中非常重要的部分,它可以实现自定义 URL、SEO、多语言等需求。通过学习本文介绍的内容,您可以更加深入地理解 CakePHP 的路由机制,并实现更加复杂的路由配置。