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

时间:2016-05-27 04:30:59

标签: laravel fine-uploader

我想在我的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中声明)?

3 个答案:

答案 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具有自动加载功能,因此它可以接收你的依赖关系"在飞行中