CodeIgniter 3 类文件名的大写首字母导致 404

Posted

技术标签:

【中文标题】CodeIgniter 3 类文件名的大写首字母导致 404【英文标题】:CodeIgniter 3 Uppercase First Letter for Class Filesnames Causing 404s 【发布时间】:2013-12-13 08:08:24 【问题描述】:

场景

我有一个网站,我正在升级到 CodeIgniter 3 的当前开发版本。我已按照升级说明将所有类文件重命名为大写(例如 application/controllers/Home.php

预期结果

对于小写 URL 可以正常使用控制器,例如:

http://examplesite.com/home/

使用 Home.php 控制器。

我得到了什么

当 url 的首字母为小写时,不会自动调用大写文件名。 (404 错误)。

我试过了

在 URL 中键入控制器的首字母大写, IE。 http://examplesite.com/Home/ 这将产生控制器为 预计。 将 routes.php 中的默认控制器大写,从而生成 页面符合预期。但是,如果这意味着我必须更改所有 URL 包含带有大写首字母的控制器,这更少 远超理想。

注意事项

该网站在 PHP 5.3.17 FastCGI 上运行。 index.php 已从 URL 中删除,其 .htaccess 规则为:
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

非常感谢任何帮助。

编辑 1

我已将其范围缩小到核心路由器中的 _validate_request 函数。如果我从_set_request 注释掉对该函数的调用,它将起作用。

编辑 2

如果我将 _validate_request 函数的名称更改为 _validate_request2 并使用新名称调用它,它会完美运行。这个函数名是保留字吗?

【问题讨论】:

对我来说很好。您是否从 system/ 目录中复制了所有内容? 是的。我昨天下载了最新开发的 zip,并重新上传了几次系统以确保我不会发疯。是否有其他文件调用该函数? 不,你有没有 application/core/MY_Router.php 文件?或者任何自定义路线? 啊,是的,我愿意。它正在覆盖该功能。非常感谢。 (该网站已有 2 年历史,我完全忘记了为什么要覆盖它)。 【参考方案1】:

在cmets中解决了,写这个只是为了正式...

升级时,您必须始终检查您是否有核心 CodeIgniter 库的扩展。如果是这样,您可能至少重载了其中的一部分,并且在更改原始代码时可能会破坏应用程序。

【讨论】:

【参考方案2】:

如果有人需要,这个对我很有用:

for f in *php ; do mv "$f" "$(\sed 's/.*/\u&/' <<< "$f")" ; done

Codeigniter 3.x 现在要求所有库/控制器/模型都具有大写文件名(第一个字母)。 所以我写了这个小 bash 脚本—— 搜索当前目录下的所有*php文件,并将每个文件名的第一个字符替换为大写:

例如:test.php => Test.php

【讨论】:

聪明的伙伴...为我节省了大量时间。【参考方案3】:

在我的网站上,我遇到了同样的问题。 所以我把所有的控制器文件命名为大写,比如 Home.php,所有的方法都用小写命名,比如 index()。然后在 URI 请求中:我输入了每个 &lt;a href=""&gt; 作为里面命名的控制器。喜欢 ComingSoon.php:

class ComingSoon extends CI_Controller 

html

<a href="ComingSoon/index">

但要注意一些非常重要的事情:

当您包含视图时:您必须输入视图名称,就像我所做的那样:我为每个控制器创建了一个小写的文件夹,例如:/application/views/comingsoon/view.php

PHP View Include must look like:
$this->load->view("comingsoon/view.php");

文件夹对您来说是可选的,但视图名称必须完全相同。

【讨论】:

以上是关于CodeIgniter 3 类文件名的大写首字母导致 404的主要内容,如果未能解决你的问题,请参考以下文章

取消word 句首字母自动大写

java中哪些首字母需要大写

java编写类名首字母必须大写吗?

thinkphp5 onebase研发规范

thinkphp 命名规范

java如何输入字串转化首字母大写