【问题标题】:CodeIgniter 3 Uppercase First Letter for Class Filesnames Causing 404sCodeIgniter 3 类文件名的大写首字母导致 404
【发布时间】: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 年历史,我完全忘记了为什么要覆盖它)。

标签: codeigniter codeigniter-3


【解决方案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");
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      • 1970-01-01
      • 1970-01-01
      • 2014-09-07
      • 1970-01-01
      • 2021-07-29
      • 2011-05-14
      相关资源
      最近更新 更多