Zend Framework 2使用composer自动加载第三方库



我正在尝试使用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的存储库创建包

从本质上讲,你只需要几条信息:

  1. 版本号及其在存储库中的位置
  2. 你试图使用的软件的名称——你可能只想添加一个供应商名称,而不是对模块太有创意
  3. 知道如何自动加载包,即知道软件使用哪条路径,并将类映射自动加载程序应用于它
  4. 至少以下其中一项,最好是两项:
    1. 承载代码的存储库的URL
    2. 已发布版本的下载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添加第三方库的人,以下是对我有效的步骤。

  1. 将第三方库复制到供应商文件夹
  2. 在composer.json 中添加以下行

    "自动加载":{"classmap":["vendor/PATH TO LIBRARY"]}

  3. 运行php composer.phar更新

然后,您应该在composer文件夹中的文件中看到第三方库中的所有类:composer/autoload_classmap.php

在zf2应用程序中实例化库中的任何类时,不要忘记在类名前面加一个\。例如:

$client = new Google_Client();

相关内容

  • 没有找到相关文章

最新更新