2014-01-21 89 views
1

我正在拉我的头发,这并不经常发生。作曲家自动加载 - 类未找到异常

我想使用作曲家自动加载器,与我的目录。自动加载器与另一个目录完美协作。

我使用以下filestructure

-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应用程序字符串测试了这一点。这是完全正确的。

现在。在我的主类我这样做

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

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

(这基本上是我做着,当然其他的PSR-0自动加载我在谈论的顶部是在这一个,工作得很好。)

然后我得到以下错误。

Fatal error: Class 'Module\Users\Users' not found in

FYI:我想只有"use Module\Users;""new \Module\Users\Users();"都返回了同样的错误。

我希望你们其中一位知道这里发生了什么。 此致敬礼。 乔纳斯

+0

将json更改为'“psr-0”会发生什么情况:{“Module”:“application /”}'?松开尾部的斜线。 –

+0

悲伤的事情 –

+1

检查大小写?类名不区分大小写,文件名通常区分大小写 - 自动加载混合两者。确保您的所有类名都正确写入了代码中的文件名和用法。 – Sven

回答

0
new Users\Users(); 

可能是你在找什么

1

如果有人仍然有这样的问题:在深入ClassLoader.php的findFileWithExtension()之后,我发现对我来说这是一个问题的情况下,就像斯文所说的那样。这个类被命名为'AbcTest',而文件名是'ABCTest.php'。更一般地说,确保文件名与类名,大小写和全部匹配;只是这种情况下的错误可能会更棘手。

0

我有同样的问题。我做了一个“作曲家更新”,它解决了我的问题。 出于某种原因,我曾在autoload_classmap.php

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

命名空间失配和它缺少对关键部分的一些信息:

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

所以,像其他所提到的,它可能是由于一些与您的代码不符的无效数据。

有时您进行修改(如修复拼写错误),并忘记重新生成自动加载器,并且一切看起来不错。