0

我正在使用 ZF2 作为库。我有一个非常标准的实现,spl_autoload_register如下所示:

set_include_path(join(PATH_SEPARATOR, array(
    get_include_path(),
    ROOT . DS . 'library',
    ROOT . DS . 'application',
)));

spl_autoload_register();

在哪里:

define('DS', DIRECTORY_SEPARATOR);
define('ROOT', dirname(dirname(__FILE__)));

在我的 Mac 上,一切正常。在我的 CentOS 服务器上,不。我唯一一次看到spl_autoload_register不喜欢这样的问题是当我尝试使用 CamelCasing 等时。显然,情况并非如此。我正在尝试加载:

\Zend\Config\Config

现在,我的目录结构如下所示:

/application
    /controller
    /model
       /objects
       /dao
       /weeeeeeee 
    /view
      /template_html
/library
    /core
    /Zend
      /Config

你明白了。

那么,为什么这不起作用?

编辑:请告诉它不是在寻找 config.php 而不是 Config.php ...

4

1 回答 1

2

spl_autoload是区分大小写的。所有类都映射到小写文件名。是的,这太疯狂了。谷歌 php 错误 #49625 和 #48129 的一些背景故事。

解决方案:

  1. 将所有包含的类重命名为小写,包括所有包含的路径
  2. 编写一个更好的自动加载器来处理混合大小写路径
  3. 使用 Composer 的自动加载器。

重命名所有内容既不现实又愚蠢,我不想再次重新发明轮子,但我很幸运能够使用 Composer 的自动加载器加载自定义库。

Composer 自动加载参考

Composer 有一个ZF2 包,但您可以通过在文件中添加自动加载定义来手动加载您的包composer.json

{
    "autoload": {
        "psr-0": {"Zend": "library/"}
    }
}
于 2013-01-16T15:10:43.710 回答