我有一个Laravel4小项目,我需要在其中合并一个第三方库。该库无法通过GIT或Packagist(仅从供应商处)获得,因此我将其下载到了vendor
目录中(必须添加一些定制供应商和软件包目录)。
而不是仅仅include()
-ing它通过供应商的文档的建议,我希望只使用现有的作曲家自动加载,并且可以用一只手搞清楚什么我做错了。
我的目录树是这样的
path/to/project
|__ app
|__ vendor
| |__ merchantcompany
| |__ client
| |__ src
| |__ client.php
|__ blah
|__ blah
我更新了我的内容compser.json
,包括:
"autoload": {
"psr-4": {
"MerchantCompany\\": "vendor/merchantcompany/client/src"
},
...
我也尝试过"MerchantCompany\\": "src"
,但无济于事。
我想念什么?
注意:来自供应商的类没有命名空间。
我是根据正确的假设认为这很好,还是应该在类脚本中添加名称空间?
您目前做错了。您可以将软件包手动注入到由Composer管理的文件夹中(如果合适的话,可以擦除该目录),然后将自动加载类合并到自己的代码中。
Composer提供了一种将所需的元数据添加到不包含元数据的项目中的方法。这是https://getcomposer.org/doc/04-schema.md#repositories中描述的存储库的“包”类型
如果看那里给Smarty的示例,您会发现基本上需要添加一个值为“ package”的键“ type”和一个composer.json
包含要查看的文件内容的键“ package”。项目。
在这种情况下,添加了一个版本标签(与使用的Smarty版本同步,以防某些更高版本使用Composer和Packagist,Smarty从3.1.x版本开始使用),以允许Composer引用此版本。 ,该软件包的名称(如果您怀疑自己是否会在Composer支持下获得该软件,则可以任意组合两个值),以及用于从中下载代码的URL(您不必同时提供ZIP下载和如果您不了解它们,则可以添加一个存储库)。
缺少的是自动加载的定义,可以像其他地方一样添加自动加载。如果没有其他效果,请使用“ classmap”。然后,Composer将扫描所有文件以查找类,接口和特征的出现,并将生成一个包含随附文件名的数组。但是,如果代码符合该标准,则也可以使用PSR-0或PSR-4。
请注意,PSR-4仅可用于使用名称空间的类!如果没有名称空间,则必须使用PSR-0或类映射。从简短的目录清单中,我怀疑代码是否与PSR-0兼容,因此只需使用classmap即可获得快速结果。
作为建议:
"repositories": [
{
"type": "package",
"package": {
"name": "merchantvendor/client",
"version": "1.0.0",
"dist": {
"url": "http://example.com/zip-download-url.zip",
"type": "zip"
},
"autoload": {
"classmap": ""
}
}
}
],
"require": {
"otherstuff": "...",
"merchantvendor/client": "1.0.0"
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句