我想在我的Laravel项目中使用此包https://github.com/FineUploader/php-traditional-server/。所以我修改了composer.json这样的文件:
"require": {
"php": ">=5.5.9",
"laravel/framework": "5.2.*",
"fineuploader/php-traditional-server": "1.0.0"
}
运行compose update命令。但是如何在Controller上使用UploadHandler
类(在包的handler.php中声明)?
答案 0 :(得分:6)
包没有使用名称空间或者其他许多Composer自动加载可以为你提供神奇的功能,所以你可以自己包含类文件:
include "vendor/FineUploader/php-traditional-server/handler.php";
或者在Laravel中使用Composer自动加载器时,您应该定义一个类图。
在作曲家json中:
{
"autoload": {
"classmap": ["vendor/FineUploader/php-traditional-server"]
}
}
然后运行composer dump-autoload
(包括“vendor / autoload.php”已由Laravel启动提供)。
他们的库中的所有类都将在代码需要时自动加载。
更新:为什么classmap是最合适的方法。
自动加载是加载类的最有效和最高效的方法,因为它只在实际需要类时才被解析,编译,加载到内存中。 “类映射”自动加载是加载不在命名空间中或不是PSR0或4格式的类的预期机制。
相反,使用全局(app boot)包括类的集合,或类似地使用composer自动加载器中的“files”选项将是最低效的,因为它将加载所有依赖 所有应用程序请求,无论它们是否将被使用。事实上,对于类依赖项使用自动加载“文件”比在每个脚本中使用特定包含的传统方法更糟糕。至少那时你只需要预加载特定的要求,因此类似于内存使用中的自动加载。
“files”自动加载选项适用于平面函数库(不是OO),它们只是在所有请求上预加载,因为函数调用没有自动加载机制。
请注意,使用操作码缓存会降低两者之间的效率差异,但内存使用问题仍然存在。
答案 1 :(得分:2)
@scipilot答案也应该有效,但我会自己做出选择:
将此部分添加到您的composer.json
文件并运行composer update
。
"files": [
"vendor/fineuploader/php-traditional-server/handler.php"
]
在此之后,类将在项目范围中可见,您的脚本将起作用。
有关在作曲家中自动加载文件的更多信息,请访问:https://getcomposer.org/doc/04-schema.md#files
答案 2 :(得分:0)
您是否尝试直接使用UploadHandler
?
Composer具有自动加载功能,因此它可以接收你的依赖关系"在飞行中