我正在尝试使用composer将第三方库自动加载到我的ZF2应用程序中,特别是Google api。我遵循了SO上这篇文章的答案,编辑了我的composer.json
"autoload": {
"psr-0": {"Googleanalytics\": "vendor/google-api-php-client/src/"}
}
并运行了更新。我可以在composer/autoload_namespaces.php 中看到条目
'Googleanalytics\' => array($vendorDir . '/google-api-php-client/src'),
但是在尝试实例化该目录(Google_Client.php)中的一个类时,我仍然会遇到一个致命的错误类
你知道我缺少什么吗?我正在尝试使用的类中包括文件:
use GoogleanalyticsGoogle_Client;
我尝试过重命名目录以防-出现问题,也尝试过在该目录中创建一个简单的test.php文件以防类名(Google_Client.php)中的下划线出现问题,但仍然是相同的错误。
为了自动加载这个库,我还需要向ZF2应用程序添加什么吗?还要注意的是,我决定不使用ZendGdata,因为这个组件似乎不再维护了。提前感谢
软件的自动加载定义不应包括任何供应商模块的自动加载。将其移动到用于包含软件的软件包定义中。
在其他新闻中:如果它不能与PSR-0一起工作,classmap自动加载器应该会处理它
更新
如何为不提供composer.json的存储库创建包
从本质上讲,你只需要几条信息:
- 版本号及其在存储库中的位置
- 你试图使用的软件的名称——你可能只想添加一个供应商名称,而不是对模块太有创意
- 知道如何自动加载包,即知道软件使用哪条路径,并将类映射自动加载程序应用于它
- 至少以下其中一项,最好是两项:
- 承载代码的存储库的URL
- 已发布版本的下载URL
在"google api php客户端"的情况下,a)存储库的URL为http://google-api-php-client.googlecode.com/svn/
,b)最新版本号为0.6.7
,a)该包的下载URL为http://google-api-php-client.googlecode.com/files/google-api-php-client-0.6.7.tar.gz
。
现在你把它填充到这个"模板"中:
"repositories": [
{
"type": "package",
"package": {
"name": "name from (2)",
"version": "version from (1)",
"dist": {
"url": "URL from (4/2)",
"type": "tar or zip according to download"
},
"source": {
"url": "URL from (4/1)",
"type": "svn",
"reference": "tags/version from (1)"
},
"autoload": {
"classmap": ["path from (3)"]
}
}
}
]
然后你可以在你的需求中要求确切的包:"require": { "name from (2)": "version from (1)" }
对于你正在使用的谷歌软件包,这基本上会让你使用这个:
"require": {
"google/google-api-php-client":"*"
},
"repositories": [
{
"type": "package",
"package": {
"name": "google/google-api-php-client",
"version": "0.6.7",
"dist": {
"url": "http://google-api-php-client.googlecode.com/files/google-api-php-client-0.6.7.tar.gz",
"type": "tar"
},
"source": {
"url": "http://google-api-php-client.googlecode.com/svn/",
"type": "svn",
"reference": "tags/0.6.7"
},
"autoload": {
"classmap": ["src/"]
}
}
}
]
添加这些主要是样板的东西的好处是,你现在可以免费下载软件。您不必关心如何手动下载、解压缩和安装软件包。您确实将此软件的自动加载信息添加到了自己的composer.json中,但它包含在您要使用的软件的包定义中,而不包含在您自己软件的自动下载区域中。
您也不必担心Composer意外删除您手动下载的软件包。
对于其他希望使用composer向ZF2添加第三方库的人,以下是对我有效的步骤。
- 将第三方库复制到供应商文件夹
-
在composer.json 中添加以下行
"自动加载":{"classmap":["vendor/PATH TO LIBRARY"]}
-
运行php composer.phar更新
然后,您应该在composer文件夹中的文件中看到第三方库中的所有类:composer/autoload_classmap.php
在zf2应用程序中实例化库中的任何类时,不要忘记在类名前面加一个\。例如:
$client = new Google_Client();