如何在Laravel中使用供应商类?

如何在Laravel中使用供应商类?,laravel,fine-uploader,Laravel,Fine Uploader,我想在我的Laravel项目中使用这个包。所以我修改了composer.json文件如下: "require": { "php": ">=5.5.9", "laravel/framework": "5.2.*", "fineuploader/php-traditional-server": "1.0.0" } 并运行“编写更新”命令。但是如何在我的控制器上使用UploadHandler类(在包的handler.php中声明)?您是否尝试直接使用UploadHand

我想在我的Laravel项目中使用这个包。所以我修改了composer.json文件如下:

"require": {
    "php": ">=5.5.9",
    "laravel/framework": "5.2.*",
    "fineuploader/php-traditional-server": "1.0.0"
}

并运行“编写更新”命令。但是如何在我的控制器上使用
UploadHandler
类(在包的handler.php中声明)?

您是否尝试直接使用
UploadHandler

Composer具有自动加载功能,因此它可以动态提取您的“依赖项”

软件包不使用名称空间或Composer自动加载可以神奇地为您提供的许多其他功能,因此您可以自己包含类文件:

包括“vendor/FineUploader/php传统服务器/handler.php”

或者,当您在Laravel中使用Composer autoloader时,您应该定义一个类映射

在composer json中:

{
    "autoload": {
        "classmap": ["vendor/FineUploader/php-traditional-server"]
    }
}
然后运行
composer dump autoload
(包括“vendor/autoload.php”已经由Laravel boot提供)

它们库中的所有类都将在代码需要时自动加载

更新:为什么classmap是最合适的方法

自动加载是加载类的最有效和最高效的方式,因为只有在实际需要类时才会对其进行解析、编译和加载到内存中。“Classmap”自动加载是加载不在命名空间中或不是PSR0或4格式的类的预期机制

相反,为类使用全局(应用程序启动)包含集,或者类似地在composer autoloader中使用“文件”选项,效率最高,因为它将加载所有应用程序请求的所有依赖项,而不管它们是否将被使用。事实上,对类依赖项使用自动加载“文件”比在每个脚本中使用特定包含项的传统方法更糟糕。至少这样,您将只预加载特定的需求,因此类似于自动加载内存使用

“文件”自动加载选项适用于函数的平面库(非OO),它们只是在所有请求上预加载,因为没有函数调用的自动加载机制


请注意,使用操作码缓存将缓和两者之间的效率差异,但内存使用问题仍然存在。

@scippilot-answer也应该有效,但我将给出我自己的选择:

将此部分添加到您的
composer.json
文件中,然后运行
composer update

"files": [
     "vendor/fineuploader/php-traditional-server/handler.php"
]
在此之后,类将在项目范围内可见,并且您的脚本将正常工作



有关在composer中自动加载文件的详细信息,请参见:

当我调用
$u=new UploadHandler()时显示未找到类“MyApp\Http\Controllers\UploadHandler”
@hienbt88在
UploadHandler
前面添加反斜杠。类似这样:
$u=new\UploadHandler()它可以工作,但“文件”不是类的预期或适当机制。它效率较低,性能较差,并且不提供按需自动加载。我已经用这些注意事项更新了我的答案。感谢@sciplot的解释,我会更新你的答案。只有FineUploader包在自己的composer.json中正确声明了自己,这才有效。不幸的是,他们没有,所以呼叫应用程序需要专门针对资源。你可以用正确的自动加载规范向他们提交拉取请求吗?