Laravel 通过Composer'自动加载第三方库;什么是自动加载器?
我有一个小Laravel4项目,我需要在其中加入一个第三方库。此库无法通过GIT或PackageGist(仅从供应商处)获得,因此我将其下载到我的Laravel 通过Composer'自动加载第三方库;什么是自动加载器?,laravel,laravel-4,composer-php,autoload,Laravel,Laravel 4,Composer Php,Autoload,我有一个小Laravel4项目,我需要在其中加入一个第三方库。此库无法通过GIT或PackageGist(仅从供应商处)获得,因此我将其下载到我的供应商目录中(必须添加一些自定义供应商和软件包目录) 我希望只使用现有的Composer autoloader,而不是像供应商文档中建议的那样使用它,并且可以用手找出我做错了什么 我的目录树是这样的 path/to/project |__ app |__ vendor | |__ merchantcompany | |__ cl
供应商
目录中(必须添加一些自定义供应商和软件包目录)
我希望只使用现有的Composer autoloader,而不是像供应商文档中建议的那样使用它,并且可以用手找出我做错了什么
我的目录树是这样的
path/to/project
|__ app
|__ vendor
| |__ merchantcompany
| |__ client
| |__ src
| |__ client.php
|__ blah
|__ blah
我更新了我的compser.json
,包括:
"autoload": {
"psr-4": {
"MerchantCompany\\": "vendor/merchantcompany/client/src"
},
...
我还尝试了“MerchantCompany\\”:“src”
,但没有成功
我错过了什么
注意:供应商的类没有名称空间。我是否正确地认为这是正确的,还是应该向类脚本添加名称空间?是基于名称空间的自动加载标准。如果您的供应商的PHP包不使用名称空间,您将无法使用它 如果包的文件是基于类的(而不是像helpers文件那样的过程函数),则可以使用autoloader。否则,您可以使用
files
autoloader,它基本上包括每个请求中的文件,无论您是否使用它
请注意,由于您是手动定义这些文件的路径,因此它们不需要位于供应商
文件夹中。实际上,我建议您将库放在另一个非.gitignore文件夹中,因为它是一个外部依赖项,您不能通过Composer自动将其包含到项目中
当然,您可以随时督促供应商更新其软件包,使其更符合PSR-4和名称空间等要求。:) 你现在做错了。您可以手动将包注入到Composer管理的文件夹中(如果认为合适,Composer可以擦除该目录),并将自动加载类型合并到您自己的代码中 Composer提供了一种向没有元数据的项目添加所需元数据的方法。这是中描述的存储库的“包”类型 如果您查看Smarty的示例,您会发现基本上需要添加一个值为“package”的键“type”和一个包含您希望在项目中看到的
composer.json
文件内容的键“package”
在本例中,添加了一个版本标记(与正在使用的Smarty版本同步,以防某些更高版本使用Composer和PackageGist,Smarty在某些版本3.1.x之后使用了Composer和PackageGist),以允许Composer引用该版本,即该包的名称(如果您怀疑是否能够获得Composer支持的软件,这两个值可以任意组合),以及下载代码的URL(如果您不知道,则不必同时提供ZIP下载和存储库)
缺少的是自动加载的定义,它可以像其他任何地方一样添加。如果其他方法都不起作用,请使用“类映射”.Composer然后将扫描所有文件中出现的类、接口和特征,并生成包含附带文件名的数组。但是,如果代码符合该标准,您也可以使用PSR-0或PSR-4
请注意,PSR-4只能用于使用名称空间的类!如果没有名称空间,则必须使用PSR-0或classmap。从目录清单的简短部分来看,我怀疑代码是否与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"
}
非常感谢你提供的所有信息。我相信这将有助于我取得进展。