加载未在vendor/Composer/autoload_namespace.php中列出的Composer包
我有一个用CakePHP3编写的应用程序。我已经通过Composer安装了Cake和其他软件包 我最近安装的是由 将其放入my加载未在vendor/Composer/autoload_namespace.php中列出的Composer包,php,cakephp,composer-php,fine-uploader,Php,Cakephp,Composer Php,Fine Uploader,我有一个用CakePHP3编写的应用程序。我已经通过Composer安装了Cake和其他软件包 我最近安装的是由 将其放入mycomposer.json中,然后运行composer update: "require": { "fineuploader/php-traditional-server": "1.1.0" } 这已按预期将文件下载到vendor/fineuploader/php传统服务器中 但是,如果我尝试在我的一个蛋糕控制器中引用它,如下所示: use UploadHa
composer.json中,然后运行composer update
:
"require": {
"fineuploader/php-traditional-server": "1.1.0"
}
这已按预期将文件下载到vendor/fineuploader/php传统服务器中
但是,如果我尝试在我的一个蛋糕控制器中引用它,如下所示:
use UploadHandler;
public function test()
{
var_dump(new \UploadHandler);
}
表示找不到类“UploadHandler”时出错
我能够运行上述内容的唯一方法是硬编码到相应文件的链接。因此,不要使用UploadHandler而使用代码>我有
require_once(ROOT . DS . 'vendor/fineuploader/php-traditional-server/handler.php');
我读到vendor/composer/autoload_namespace.php
应该包含可以自动加载的名称空间。但是,当我打开该文件时,没有对该包的引用(实际上只有大约3个,而我的供应商
目录中有很多包,其中一些我可以很好地使用)
那么,加载UploadHandler
的正确方法是什么呢?我认为使用Composer的意义在于它负责自动加载这些文件,因此您不必使用类似于require()
?的东西。您是否阅读了handler.php
文件中的注释
不要直接从客户端代码中使用或引用此代码。相反,这应该通过endpoint.php或endpoint-cors.php文件来实现
因此,AFAICT包没有定义任何自动加载功能,因为您不应该直接使用UploadHandler
类,而是应该需要endpoint.php
或endpoint cors.php
文件,该文件不包括任何类,并且只在需要时才需要
当然,这些端点文件与CakePHP不兼容,因此您可能有理由直接使用handler类。但是,包不使用名称空间,类名与文件名不匹配,即它既不遵循PSR-0也不遵循PSR-4约定,而且正如前面提到的,包composer.json
没有定义任何自动加载配置,因此无论包遵循什么约定,这将导致PHP类/文件包没有自动加载功能
因此,如果您想要自动加载功能,您可以通过向项目添加一个classmap
autoload条目composer.json
,例如:
{
"autoload": {
"classmap": [
"vendor/fineuploader/php-traditional-server/"
]
}
}
然后重新卸载自动加载器,自动加载应该可以正常工作:
$composer转储自动加载
另见