2016-05-27 48 views

回答

2

@scipilot答案應該工作過,但我會給我自己的選擇:

這部分添加到您的composer.json文件並運行composer update

"files": [ 
    "vendor/fineuploader/php-traditional-server/handler.php" 
] 

之後,類將在項目範圍內可見,您的腳本將工作。


瞭解自動加載文件在這裏作曲:https://getcomposer.org/doc/04-schema.md#files

+0

當我調用'$ u = new UploadHandler();'它顯示'Class'MyApp \ Http \ Controllers \ UploadHandler'找不到' – hienbt88

+1

@ hienbt88在'UploadHandler'前加上反斜槓。像這樣:'$ u = new \ UploadHandler();' –

+0

謝謝,它的工作 – hienbt88

0

您是否嘗試過直接使用UploadHandler
作曲家具有自動加載功能,因此它可以在飛行

+0

我想,它可以是不可見的。 – hienbt88

+0

這隻有在FineUploader包在自己的composer.json中正確聲明自己時才起作用。不幸的是,他們沒有,所以調用應用程序需要專門針對資源。您可以使用正確的自動加載規範向他們提交拉取請求? – scipilot

6

包拿起你的「依賴」不使用名稱空間或很多其他的作曲家自動加載可以爲您提供神奇,讓你既可以包含類文件自己:

include "vendor/FineUploader/php-traditional-server/handler.php";

或正在使用的作曲家自動加載的Laravel,你應該定義一個類映射。

在你的作曲家JSON:

{ 
    "autoload": { 
     "classmap": ["vendor/FineUploader/php-traditional-server"] 
    } 
} 

然後運行composer dump-autoload (包括 「供應商/ autoload.php」 已經由Laravel引導提供)。

在您的代碼需要它們時,其庫中的所有類都將自動加載。

更新:爲什麼classmap是最合適的方法。

自動加載是加載類的最有效和最高效的方式,因爲只有在實際需要類時纔會將其解析,編譯並加載到內存中。 「Classmap」自動加載是加載不在名稱空間或PSR0或4格式中的類的預期機制。

;相反地,使用一個全球性的(應用程序啓動),包括上課設置,或類似的使用作曲家自動加載機的「文件」選項將是最沒有效率的,因爲它會加載所有依賴所有應用程序請求,不管他們是否會被使用。事實上,對於類依賴關係使用自動載入「文件」比在每個腳本中使用特定包含的傳統方法更糟糕。至少你只會預先加載特定的需求,因此類似於內存使用中的自動加載。

「文件」自動加載選項專用於平面函數庫(不是OO),因爲函數調用沒有自動加載機制,所以只需在所有請求上預加載。

請注意,使用操作碼緩存會緩解兩者之間的效率差異,但內存使用問題依然存在。