2014-01-21 45 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', 

所以,像其他所提到的,它可能是由於一些與您的代碼不符的無效數據。

有時您進行修改(如修復拼寫錯誤),並忘記重新生成自動加載器,並且一切看起來不錯。