【问题标题】:Why does naming my codeigniter controller "Jamie" work, but "JamiesCorner" fails?为什么将我的 codeigniter 控制器命名为“Jamie”有效,但“JamiesCorner”却失败了?
【发布时间】:2018-12-16 19:47:20
【问题描述】:

我正在尝试在我正在构建的名为“Jamie's Corner”的网站上创建一个新部分。所以我复制了一个“关于这个站点...”部分的控制器,将文件重命名为 JamiesCorner.php,并将控制器重命名为“JamiesCorner”。当我加载页面 (my_site.local/index.php/jamiescorner) 时,我希望看到与“关于此站点...”部分相同的内容。相反,我得到了 Codeigniter 404 页面。我尝试了很多东西,但发现将控制器(和文件)重命名为 Jamies 是可行的。为什么是这样? “JamiesCorner”这个名字显然没有错。那么为什么 Codeigniter 拒绝它呢?

【问题讨论】:

  • 这条路径“my_site.local/index.php/jamiescorner”似乎是错误的。当您访问“my_site.local/index.php/about”(或您的关于页面的名称)时,您是否看到您的关于页面?。
  • 尝试转到“my_site.local/jamiescorner.php”而不是“my_site.local/index.php/jamiescorner”
  • 大多数计算机系统都区分大小写。
  • 我还没有从我的溃败中删除 index.php(这是一个完整的'另一个等待发生的帖子),所以如果不将 index.php 放在域名:-/

标签: php codeigniter-3 naming


【解决方案1】:

CodeIgniter naming convention 要求只有类文件中的第一个字符和类定义应为大写。实际上,就第一个字符而言,这是一个rule。至于名称的其余部分,它不是一个规则,但它对 URL 有影响。

使用命名规则,文件应该是Jamies_corner.php,类定义如下

class Jamies_corner extends CI_Controller {

然后的 URL 将是 my_site.local/index.php/jamies_corner

CodeIgniter 在加载控制器时总是强制第一个字符为大写。但它将按原样使用控制器名称的其余部分。在区分大小写的操作系统(所有变体的 Linux)中,文件名必须完全匹配,否则将找不到文件。

换句话说,使用文件JamiesCorner.phpclass JamiesCorner,URL 至少需要是my_site.local/index.php/jamiesCorner

您也可以使用.../JamiesCorner,但如果“Corner”中没有大写“C”,它每次都会失败。

【讨论】:

  • 但这只是一个约定,用于为 Codigniter 代码库做出贡献。那里没有任何说明使用 CamelCasing 是严格禁止的,并且会导致任何类型的错误。毕竟,我在其他所有东西中都使用它,而这个控制器是唯一导致错误的控制器。这没有帮助,但还是谢谢。
  • 似乎不是。我为我的所有控制器使用了一个 CammelCased 超类,它又继承自 .如果这是一条规则,那么所有控制器都应该无法加载。但他们没有,只有这个给我带来了麻烦。
  • 您使用的是什么操作系统?
  • Manjaro。为什么要问?
  • 检查您是否使用区分大小写的操作系统
猜你喜欢
  • 2020-09-07
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-26
  • 1970-01-01
  • 2015-07-07
相关资源
最近更新 更多