4

设想

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

预期结果

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

http://examplesite.com/home/

使用 Home.php 控制器。

我得到了什么

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

我努力了

  • 在 URL 中键入控制器的首字母大写,即。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并使用新名称调用它,它会完美运行。这个函数名是保留字吗?

4

3 回答 3

3

在评论中解决,写这个只是为了让它正式......

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

于 2013-11-27T17:14:00.127 回答
3

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

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

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

例如:test.php => Test.php

于 2017-02-20T18:32:44.867 回答
0

在我的网站上,我遇到了同样的问题。所以我把所有的控制器文件命名为大写,比如 Home.php,所有的方法都用小写命名,比如 index()。然后在 URI 请求中:我输入了每个<a href="">作为内部命名的控制器。像 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");

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

于 2016-06-23T07:58:20.890 回答