2016-02-27 181 views
3

我目前正在開發一個框架,但我無法弄清楚我將如何設置自動加載。首先,我創建了一個包含樣本類和composer.json的包。我已經被自動加載該樣品等級:作曲家不自動加載包

"autoload": { 
    "classmap": [ 
     "libs/" 
    ] 
} 

我檢查/vendor/mypackage/vendor/composer/autoload_classmap.php並確認包的自動加載機工作正常。但問題是,除非我直接包含該包的autoload.php,否則我無法從主應用程序訪問該包的類。

UPDATE

/vendor/foo/mypackage/composer.json

"autoload": { 
    "psr-4": { 
    "Http\\": "libs/" 
    } 
} 

/vendor/foo/mypackage/libs/Request.php

namespace Http; 
class Request {} 

回答

1

自己解決。每當我更改pacakge的composer.json時,我只需重新安裝軟件包。

1

首先, ,通常使用psr-0psr-4自動加載配置會更好。使用classmap時,每次添加新類或重命名時都必須重新裝入自動裝載器。

您始終需要使用require 'vendor/autoload.php';包含Composer自動加載器。添加此類需求語句的最佳位置在您的前端控制器文件中。

+0

我爲我的mvc框架使用psr-4,但它不適用於我的作曲家包。另外,我還包括/vendor/autoload.php,但不能使用MyPackage \ SampleClass,而不包括/vendor/mypackage/vendor/autoload.php。 /vendor/autoload.php是否應該包含自動加載程序包?我是否要逐個包含所有軟件包自動加載器? –

+0

爲什麼'mypackage'目錄中有'vendor'目錄?如果你需要Composer的包,所有的依賴將被安裝在根目錄'vendor /'目錄下,所有的自動加載都將被設置在根目錄'vendor/autoload.php'中。 –

+0

有一個供應商文件夾,因爲我用來在/ vendor/mypackage中運行dump-autoload命令,但後來我明白這不是必需的。我已經更新了我的問題。我像這樣調用我的類:'new \ Http \ Request()'。我在代碼中看不到任何錯誤。 –