【问题标题】:Composer autoload - Class not found exception作曲家自动加载 - 找不到类异常
【发布时间】:2014-02-11 19:21:17
【问题描述】:

我在这个问题上大发雷霆,但这种情况并不经常发生。

我正在尝试将 composers 自动加载器与我的目录一起使用。自动加载器与另一个目录完美配合。

我正在使用以下文件结构

-Root
 | application
   | Module
      | Users
         | Users.php

Users.php 包含以下代码

<?php
namespace Module\Users;

class Users {
  public function test() { return "Testing hippie-yaay!"; }
}

composer.json 包含以下 psr-0 自动加载

"psr-0":{"Module\\": "application/"}

在 autoloader_namespaces.php 中编译成如下

'Module\\' => array($baseDir . '/application'),

这又是完全正确的(我已经通过回显 basedir -application 字符串对此进行了测试。完全正确。

现在。在我的主要课程中,我执行以下操作

<?php
namespace System\Core;
use Module\Users\Users;

    class Initiater {
      public function bootSystem() {
        $u = new Users();
      }
    }

(这基本上就是我所做的,当然我在顶部谈论的其他 psr-0 自动加载都超过了这个,工作得很好。)

然后我得到以下错误。

致命错误:在

中找不到类“模块\用户\用户”

仅供参考:我尝试只使用 "use Module\Users;""new \Module\Users\Users();" 都返回相同的错误。

我希望你们当中有人知道这里发生了什么。 最好的祝福。 乔纳斯

【问题讨论】:

  • 将 json 更改为 "psr-0":{"Module": "application/"} 会发生什么?松开尾部斜杠。
  • 是否区分大小写?类名不区分大小写,文件名通常区分大小写 - 并且自动加载混合了两者。确保所有类名都正确写入文件名和代码中的用法。
  • “我正在为这个而烦恼”而不是那样,只是调试它?在 ClassLoader::findFile 函数中设置一个断点,看看它做错了什么。

标签: php composer-php autoloader


【解决方案1】:

如果还有人遇到这个问题:在深入了解ClassLoader.phpfindFileWithExtension() 之后,我发现对我来说这是一个案例问题,就像 Sven 提到的那样。类名为AbcTest,而文件名为ABCTest.php。更一般地说,确保文件名与类名、大小写和全部匹配;只是这种情况下的错误更难发现。

【讨论】:

    【解决方案2】:

    我有同样的问题。我做了一个“作曲家更新”,它解决了我的问题。 出于某种原因,我在 autoload_classmap.php 中有一个命名空间不匹配

    'Module' => $baseDir . '/application/Module/Users/Users.php',
    

    它缺少一些关于关键部分的信息:

    'Module\\Users' => $baseDir . '/application/Module/Users/Users.php',
    

    因此,就像其他提到的那样,这可能是由于某些与您的代码不匹配的无效数据造成的。

    有时您进行了修改(例如修复错字)并忘记重新生成自动加载器,但一切看起来都不错。

    【讨论】:

      【解决方案3】:
      new Users\Users();
      

      可能就是你要找的东西

      【讨论】:

        猜你喜欢
        • 2018-10-01
        • 2016-03-06
        • 2019-05-16
        • 2014-04-24
        • 2017-01-02
        • 2019-01-31
        • 2017-08-25
        相关资源
        最近更新 更多