【问题标题】:cakePHP Routing using two controllerscakePHP 路由使用两个控制器
【发布时间】:2026-01-27 11:05:01
【问题描述】:

我使用了一个 cakePHP 框架。我对 cakephp 中的路由有疑问。

我有两个控制器“管理员”和“用户”。

我在“用户”控制器中为“管理员”控制器编写了一些方法。请参见下面的示例。

class UsersController {
    public function admin_index() {
       my_code
    }
}

class AdminsController {
    My methods
}

根据 cakephp 路由规则,如果我想从管理控制器使用 admin_index 方法而不是使用以下 URL:

site_url/admin/users/index

我想从上面的 URL 中删除 admin 关键字。

我在谷歌上搜索了很多,但我没有找到任何合适的解决方案。

提前感谢您帮助我。

【问题讨论】:

  • 您使用的是哪个版本?
  • 我用的是2.X版本

标签: php cakephp routing routes url-routing


【解决方案1】:

如果您需要使用 AdminsController 中的 admin_index,那么您的 url 应该是 site_url/admin/admins/index

还要检查 core.php 文件中的这一行:

https://github.com/cakephp/cakephp/blob/2.5/app/Config/core.php#L152

如果您需要在 AdminsController 中为 admin_index 方法使用 site_url/admin/users/index,那么我宁愿禁用核心文件中的路由并再次写入路由。

请也阅读此内容CakePHP - Routing Using 'admin_' Prefix。可能有帮助

【讨论】:

  • 我使用了我的问题中提到的上述 URL,它的工作完美。但我想从 URL 中删除 'admin' 关键字或在 URL 中显示任何其他文本,即我的问题中的调用 URL。比如'site_url/user_list'。
  • 我的回答中的网址在您的问题检查中没有再次提及
【解决方案2】:

我找到了解决办法。

路由器连接中的用户前缀

Router::connect('/:controller/:action/*', array('prefix' => 'admin', 'admin' => true, 'controller' => 'admins'));

如果您想在参数上添加条件,例如 (':action' is 'addUser' :在此示例中,此路由器仅在其操作为 'addUser' 时有效),而不是使用以下代码

Router::connect('/:controller/:action/*', array('prefix' => 'admin', 'admin' => true, 'controller' => 'admins'),
                                          array('action'=>'index|edit'));

【讨论】: