2017-03-10 155 views
-1

這裏面是我的文件夾結構PHP:作曲家自動加載不與多個目錄工作src文件夾

enter image description here

在我 package/index.php這個樣子的

require_once 'vendor/autoload.php'; 

use HelloWorld\SayHello; 

use Test\First; 

//works fine 
SayHello::world(); 

//returns classnot found error 
First::sayTest(); 

在我composer.json」我

包括以下內容。

"autoload": { 
    "psr-0": { 
     "HelloWorld": "src/" 
    } 
} 

但我得到了以下錯誤First::sayTest()

Fatal error: Uncaught Error: Class 'Test\First' not found

但類First.phpsrc\Test文件夾下存在。

namespace Test; 
class First 
{ 
    public static function sayTest() 
    { 
     echo 'test'; 
    } 
} 

回答

-1

變化composer.json閱讀:

"autoload": { 
    "psr-4": { 
     "": "src/" 
    } 
} 

然後運行composer dump-autoload再生vendor/autoload.php

閱讀更多關於的autoload欄目。

+0

其工作感謝:) – Jabaa

+1

這實際上是不好的建議,因爲你的自動加載聲明所有的類可能在'src'中找到,這對大多數人來說都不是這樣。您可以根據需要添加儘可能多的名稱空間前綴和目錄,任何比'「」'長的東西都更適合您的解決方案。 – Sven

0

您的composer.json包含一些條目,這使得它加載HelloWorld,但文件夾「Test」沒有這樣的條目。

也許這將有助於將您的First.php複製到HelloWorld文件夾並在package.index.php中更改您的引用。

+0

恰尼如何使composer.json – Jabaa

+0

爲'Test'文件夾中的條目看到axiac的答案,看起來不錯。 –

1

您只聲明一個前綴位於src中。再加一條:

"autoload": { 
    "psr-0": { 
     "HelloWorld": "src/", 
     "Test": "src/" 
    } 
} 

另外請注意,當您使用的命名空間,PSR-4更適合:

"autoload": { 
    "psr-4": { 
     "HelloWorld\\": "src/HelloWorld/", 
     "Test\\": "src/Test" 
    } 
}