使用前缀路由时 url 中的 CakePHP3.x 控制器名称

2024-03-27

我正在尝试在 CakePHP3 中使用前缀路由。我将以下几行添加到/config/routes.php。

Router::prefix("admin", function($routes) {
    // All routes here will be prefixed with ‘/admin‘
    // And have the prefix => admin route element added.
    $routes->connect("/",["controller"=>"Tops","action"=>"index"]);
    $routes->connect("/:controller", ["action" => "index"]);
    $routes->connect("/:controller/:action/*");
});

之后,我创建了 /src/Controller/Admin/QuestionsController.php ,如下所示。

<?php
     namespace App\Controller\Admin;
     use App\Controller\AppController;

     class QuestionsController extends AppController {
        public function index() {
        //some code here
        }
     }
?>

最后我尝试访问localhost/app_name/admin/questions/index,但我收到一个错误消息,Error: questionsController could not be found。但是,当我将控制器名称的第一个字母大写(即 localhost/app_name/admin/Questions/index)时,它工作正常。我认为这很奇怪,因为没有前缀,我可以使用第一个字符不大写的控制器名称。 这是某种错误吗?


在 Cake 3.x 中,默认情况下路由不再变形,相反,您必须显式地使用InflectedRoute路由类,例如默认情况下可以看到的蜜蜂routes.php应用程序配置:

Router::scope('/', function($routes) {
    // ...

    /**
     * Connect a route for the index action of any controller.
     * And a more general catch all route for any action.
     *
     * The `fallbacks` method is a shortcut for
     *    `$routes->connect('/:controller', ['action' => 'index'], ['routeClass' => 'InflectedRoute']);`
     *    `$routes->connect('/:controller/:action/*', [], ['routeClass' => 'InflectedRoute']);`
     *
     * You can remove these routes once you've connected the
     * routes you want in your application.
     */
    $routes->fallbacks();
});

您自定义的路由没有指定特定的路由类别,因此默认Route正在使用类,而后备路由则使用变形路由,这就是它在没有前缀的情况下工作的原因。

因此,要么在 URL 中使用大写的控制器名称,要么使用类似的路由类InflectedRoute正确地转换它们:

Router::prefix('admin', function($routes) {
    // All routes here will be prefixed with ‘/admin‘
    // And have the prefix => admin route element added.
    $routes->connect(
        '/',
        ['controller' => 'Tops', 'action' => 'index']
    );
    $routes->connect(
        '/:controller',
        ['action' => 'index'],
        ['routeClass' => 'InflectedRoute']
    );
    $routes->connect(
        '/:controller/:action/*',
        [],
        ['routeClass' => 'InflectedRoute']
    );
});

也可以看看http://book.cakephp.org/3.0/en/development/routing.html#route-elements http://book.cakephp.org/3.0/en/development/routing.html#route-elements

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用前缀路由时 url 中的 CakePHP3.x 控制器名称 的相关文章

  • 我可以停止 CakePHP 获取查询的所有行吗?

    我正在使用 CakePHP 和 modelName gt find 调用选择相当多的行 可能是数百行 通常 在 PHP MySQL 中这当然不会成为问题 因为您在 while 循环中获取它们 但是 CakePHP 将所有行加载到一个数组中
  • 用于在 Cakephp 中创建单选按钮的表单助手

    我正在尝试使用 Cakephp 创建一个单选按钮 结果应该类似于 div div
  • Cakephp:将 AppController 抽象到另一个层次,可能吗?

    我想知道是否可以在 AppController 和我的应用程序的其他控制器之间添加另一个抽象控制器 这样我的控制器 例如UsersController 扩展了 SecureController SecureController 扩展了 Ap
  • CakePHP Facebook 集成与 CakePHP-Facebook-Plugin 的注销问题

    我正在寻找一种方法CakePHP Facebook 插件 https github com webtechnick CakePHP Facebook Plugin让用户退出我的应用程序 但不让他们退出他们自己的 Facebook 如果我调用
  • 按 ID 分组和按日期排序

    lastComments this gt Comment gt find all array fields gt array Comment news id Comment date Comment content group gt arr
  • CakePHP - 选择性 SSL

    如何对网站的某些部分强制使用 HTTPS 例如登录页面或注册页面 并使用 HTTP 来完成网站的其余部分 我最喜欢的强制转换为 https 的方法是将其作为 php 脚本中的第一件事 它可以在 Joomla 中运行 也可以在 CakePHP
  • Godaddy 托管上的 CakePHP 控制台

    我一直在努力让我的 CakePHP 网站在 Godaddy 网格托管 帐户上运行 我的蛋糕应用程序设置是从帐户的子目录托管的 并且可以通过子域访问 我必须调整我的 htaccess 文件才能使其正常工作 现在我需要让 CakePHP 控制台
  • 当复选框条件更改时,如何使用ajax更新mysql数据库?

    我有一个在客户端按行显示的文章表 每篇文章都有一个唯一的 ID 并包含一个复选框以指示该文章是否被选中为收藏夹 如果它是最喜欢的 则该复选框已被选中 如果没有 则未选中 现在 如果特定于每一行的复选框条件发生变化 我需要 js 或 jque
  • 自定义查找器与关联定义中的匹配?

    我有两个模型 联系人和具有BelongsToMany 关联的组 我只想获取联系人可以访问的组 为此 我有一个自定义查找器 public function findAccessible Query query array options re
  • Cakedc.users => 总是重定向到主页

    我在新的 Cakephp 安装上使用插件 CakeDC Users 我有两个控制器 PagesController php CardsController php Pages 有 1 个操作 Beta 它是主页 Cards 有两个操作 索引
  • CakePHP Auth 组件使用 $this->Auth->login() 时未登录;

    我是 cakePHP 的新手 我已经阅读了他们的文档 并且正在遵循他们的简单身份验证示例 我还广泛搜索 包括本网站上的答案 来寻找我的问题的答案 我正在使用 cakePHP 2 0 我的 UsersController 的登录功能如下所示
  • 如何在索引视图中打印关联数据

    subjects this gt Subjects gt find all contain gt Users fields gt Users username Users email gt hydrate false gt toArray
  • CakePHP 2.1.x - 在 AppController 中运行没有任何模型的查询

    我正在尝试在 AppController 中对没有与之关联的模型的表运行查询 我不想使用模型 因为这个查询会在每个请求上触发 我想使用模型会让它慢一些 我在一个论坛上发现这可以通过 CakePHP 1 3 中的以下代码来实现 db Conn
  • 如何在 nginx 反向代理后面安全地检测 CakePHP 中的 SSL?

    CakePHP 我见过的所有版本 检查 SERVER HTTPS 查看请求是否是通过 HTTPS 而不是普通 HTTP 发出的 我使用 nginx 作为负载均衡器 后面是 Apache 应用程序服务器 由于 SSL 连接在负载均衡器处终止
  • 在 CakePHP 中向文章添加评论

    我正在学习 CakePHP 这是我的第一个 MVC 我有一些 最佳实践 问题 这是我对显示新闻文章的看法 h1 h1 p p div class comment style margin left 50px p p div
  • Cakephp + 枚举支持:无法保存或选择枚举 0 和 1

    当我保存具有两个枚举字段的数据来管理消息状态时 即用户已读或未读 我使用枚举 1 0 来管理状态 1 gt 已读和 0 gt 未读 以下代码将保存消息 但在状态栏中保存空文件 data array message gt test messa
  • CakePHP:无法访问 MySQL 数据库

    我是 CakePHP 的新手 刚刚完成配置过程 但很困惑为什么 Cake 无法访问我的 MySQL 数据库 Cake 信息页面显示我的 tmp 目录是可写的 FileEngine 正在用于缓存 不知道这意味着什么 并且我的数据库配置文件存在
  • 未找到 CakePHP DebugKit/插件 webroot

    我已经安装了 CakePHP 的调试工具包 但它无法在我的页面上正确加载 它只是页面底部的一堆文本和数组 我的浏览器显示出现 404 错误 debug kit css debug toolbar css debug kit js jquer
  • 在cakephp 3中动态更改数据库连接

    我正在尝试更改中使用的数据库连接蛋糕php 3在飞行中 我找到的这个问题的每个答案都指的是蛋糕PHP 2 These https stackoverflow com questions 27655613 multiple databases
  • 如何删除 CakePHP 的尾随计时基准注释

    我已经解决这个可怕的问题几个小时了 尽我所能在谷歌上搜索 但仍然不幸找到解决方案 问题是 CakdPHP 渲染的每个页面都有一个默认的尾随计时基准注释 例如 如何删除最后一行 在此处输入代码 core php or anywhere els

随机推荐