Laravel 通过Composer'自动加载第三方库;什么是自动加载器?

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

我有一个小Laravel4项目,我需要在其中加入一个第三方库。此库无法通过GIT或PackageGist(仅从供应商处)获得,因此我将其下载到我的
供应商
目录中(必须添加一些自定义供应商和软件包目录)

我希望只使用现有的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"
}

非常感谢你提供的所有信息。我相信这将有助于我取得进展。