簡體   English   中英

加載未在vendor / composer / autoload_namespaces.php中列出的Composer軟件包

[英]Loading a Composer package not listed in vendor/composer/autoload_namespaces.php

我有一個用CakePHP 3編寫的應用程序。我已經通過Composer安裝了Cake和其他軟件包。

我安裝的最新版本是fineuploader/php-traditional-serverhttps://packagist.org/packages/fineuploader/php-traditional-server ),方法是將其放置在composer.json然后運行composer update

 "require": {
    "fineuploader/php-traditional-server": "1.1.0"
 }

這已按預期將文件下載到vendor/fineuploader/php-traditional-server

但是,如果我嘗試在我的一個Cake Controller中引用它,如下所示:

use UploadHandler;

public function test()
{
    var_dump(new \UploadHandler);
}

錯誤提示未找到類“ UploadHandler”

我能夠執行以上操作的唯一方法是通過硬編碼到相應文件的鏈接。 因此,不要use UploadHandler; 我有

require_once(ROOT . DS . 'vendor/fineuploader/php-traditional-server/handler.php'); 

我在https://jtreminio.com/2012/10/composer-namespaces-in-5-minutes/上閱讀, vendor/composer/autoload_namespaces.php應該包含可以自動加載的名稱空間。 但是,當我打開該文件時,並沒有對該程序包的引用(實際上只有大約3個,而我的vendor目錄中有很多程序包,我可以很好地使用其中的一些程序包)。

那么加載UploadHandler的正確方法是什么? 我認為使用Composer的要點是它會自動加載這些文件,因此您不必使用require()類的東西?

您是否已閱讀handler.php文件中的注釋?

不要直接從客戶端代碼中使用或引用它。 相反,這應該通過endpoint.php或endpoint-cors.php文件來要求

因此,AFAICT程序包未定義任何自動加載功能,因為您不應直接使用UploadHandler類,而應使用不包含任何類的endpoint.phpendpoint-cors.php文件,並且應僅在需要時才需要。

當然,這些端點文件與CakePHP不兼容,因此您可能有理由直接使用處理程序類。 但是,該軟件包不使用名稱空間,並且類名與文件名不匹配,即它既不遵循PSR-0也不遵循PSR-4約定,並且如上所述,軟件包composer.json沒有定義任何自動加載配置,因此,無論軟件包遵循什么約定,都會導致PHP類/文件沒有自動加載功能。

因此,如果您想要自動加載功能,則可以通過例如在項目composer.json添加類classmap自動加載項來最終解決此問題,例如:

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

然后重新轉儲自動裝帶器,自動裝帶應能正常工作:

$ composer dump-autoload

也可以看看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM