如何在 Laravel 中使用供应商 class?
How to use a vendor class in Laravel?
我想在我的 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"
}
和运行 撰写更新命令。但是如何在我的控制器上使用 UploadHandler
class(在包的 handler.php 中声明)?
您尝试过直接使用 UploadHandler
吗?
Composer 具有自动加载功能,因此它可以即时获取您的 "dependencies"
该包没有使用名称空间或 Composer 自动加载可以神奇地为您提供的许多其他内容,因此您可以自己包含 class 文件:
include "vendor/FineUploader/php-traditional-server/handler.php";
或者当您在 Laravel 中使用 Composer 自动加载器时,您应该定义一个 classmap。
在你的作曲家 json:
{
"autoload": {
"classmap": ["vendor/FineUploader/php-traditional-server"]
}
}
然后运行composer dump-autoload
(包括 "vendor/autoload.php" 已经由 Laravel 启动提供)。
他们库中的所有 classes 将在您的代码需要它们时自动加载。
更新:为什么 classmap 是最合适的方法。
自动加载是加载 class 最有效和最高效的方法,因为它仅在实际需要 class 时才被解析、编译、加载到内存中。 "Classmap" 自动加载是加载 class 不在命名空间中或不在 PSR0 或 4 格式中的预期机制。
相反,为 classes 使用全局(应用程序引导)包含集,或者类似地使用 composer 自动加载器中的 "files" 选项效率最低,因为它会加载 all dependencies for all application requests,不管它们是否会被使用。事实上,为 class 依赖项使用自动加载 "files" 比在每个脚本中包含特定内容的传统方法更糟糕。至少那时你只会预加载特定的要求,因此类似于内存使用的自动加载。
"files" 自动加载选项适用于平面函数库(不是 OO),它们只是在所有请求上预加载,因为函数调用没有自动加载机制。
请注意,使用操作码缓存会缓和两者之间的效率差异,但内存使用问题仍然存在。
@scipilot 的回答应该也可以,但我会给出自己的选择:
将此部分添加到您的 composer.json
文件和 运行 composer update
。
"files": [
"vendor/fineuploader/php-traditional-server/handler.php"
]
在此之后,class 将在项目范围内可见,您的脚本将起作用。
更多关于在 composer 中自动加载文件的信息:https://getcomposer.org/doc/04-schema.md#files
我想在我的 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"
}
和运行 撰写更新命令。但是如何在我的控制器上使用 UploadHandler
class(在包的 handler.php 中声明)?
您尝试过直接使用 UploadHandler
吗?
Composer 具有自动加载功能,因此它可以即时获取您的 "dependencies"
该包没有使用名称空间或 Composer 自动加载可以神奇地为您提供的许多其他内容,因此您可以自己包含 class 文件:
include "vendor/FineUploader/php-traditional-server/handler.php";
或者当您在 Laravel 中使用 Composer 自动加载器时,您应该定义一个 classmap。
在你的作曲家 json:
{
"autoload": {
"classmap": ["vendor/FineUploader/php-traditional-server"]
}
}
然后运行composer dump-autoload
(包括 "vendor/autoload.php" 已经由 Laravel 启动提供)。
他们库中的所有 classes 将在您的代码需要它们时自动加载。
更新:为什么 classmap 是最合适的方法。
自动加载是加载 class 最有效和最高效的方法,因为它仅在实际需要 class 时才被解析、编译、加载到内存中。 "Classmap" 自动加载是加载 class 不在命名空间中或不在 PSR0 或 4 格式中的预期机制。
相反,为 classes 使用全局(应用程序引导)包含集,或者类似地使用 composer 自动加载器中的 "files" 选项效率最低,因为它会加载 all dependencies for all application requests,不管它们是否会被使用。事实上,为 class 依赖项使用自动加载 "files" 比在每个脚本中包含特定内容的传统方法更糟糕。至少那时你只会预加载特定的要求,因此类似于内存使用的自动加载。
"files" 自动加载选项适用于平面函数库(不是 OO),它们只是在所有请求上预加载,因为函数调用没有自动加载机制。
请注意,使用操作码缓存会缓和两者之间的效率差异,但内存使用问题仍然存在。
@scipilot 的回答应该也可以,但我会给出自己的选择:
将此部分添加到您的 composer.json
文件和 运行 composer update
。
"files": [
"vendor/fineuploader/php-traditional-server/handler.php"
]
在此之后,class 将在项目范围内可见,您的脚本将起作用。
更多关于在 composer 中自动加载文件的信息:https://getcomposer.org/doc/04-schema.md#files