2015-02-08 40 views
1

因爲我是新手,所以我試圖將自己的頭圍繞在composer/psr-4自動加載上。無法加載與PSR-4位於同一文件夾中的類

我的項目具有以下結構:

| ProjectName 
    |- src  
    | |- MainComponent 
    | |- MainClass.php 
    | |- Component1 
    | |- Foo.php 
    | |- Bar.php 
    | |- Component2 
    | |- Baz.php 
    |- tests 
    | |- FooTest.php 
    | |- ... 
    |- vendor 
    | |- [...] 
    | |- ...  
    |- composer.json 
    |- phpunit.xml.dist 

在我composer.json,我有以下PSR-4項:

"autoload": { 
    "psr-4": { 
     "MyName\\ProjectName\\": "src/" 
    } 
} 

我已經完成了我的第一個組成部分,並已命名空間的類Foo.php是這樣的:

namespace MyName\ProjectName\Component1; 

class FooClass 
{ 
    ... 
} 

現在我想在Bar.php中使用FooClass駐留在同一文件夾):

namespace MyName\ProjectName\Component1; 

$foo = new FooClass(); 

而且我得到以下錯誤:

Fatal error: Class 'MyName\ProjectName\Component1\FooClass' not found in 
/path/to/Bar.php 

與全名試圖在同樣的錯誤被拋出:

use MyName\ProjectName\Component1\FooClass; 

$foo = new FooClass(); 

怪異事情是PHPUnit可以正確解析名稱空間,因爲我的測試使用與上面相同的準確語句加載並正確執行。
這是我的測試/ FooTest.php:

use MyName\ProjectName\Component1\FooClass; 

class FooTest extends PHPUnit_Framework_TestCase 
... 


$ phpunit 
OK (15 tests, 383 assertions) 

我在做什麼錯?

回答

2

你的班級名稱是錯誤的。正如你可以在PSR-4 rfc中看到的那樣,類名必須等於文件名。

所以,當你有路徑類,如:src/Component1/Foo.php

你的空間必須是這樣的:\MyName\ProjectName\Component1和類名必須是:

class Foo { ... } 

,進口:

use MyName\ProjectName\Component1\Foo; 
相關問題