![](/img/trans.png)
[英]Composer does not generate autoloader information (autoload_namespaces.php)
[英]Loading a Composer package not listed in vendor/composer/autoload_namespaces.php
我有一個用CakePHP 3編寫的應用程序。我已經通過Composer安裝了Cake和其他軟件包。
我安裝的最新版本是fineuploader/php-traditional-server
( https://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.php
或endpoint-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.