📜  CakePHP-路由(1)

📅  最后修改于: 2023-12-03 14:59:52.852000             🧑  作者: Mango

CakePHP-路由

简介

在 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 时,将调用 ArticlesControllerview 动作,并将 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。这个过程叫做 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 的路由机制,并实现更加复杂的路由配置。