使用composer的Zend Framework 2 Autoload第三方库

时间:2013-11-21 22:38:12

标签: zend-framework2 composer-php

我正在尝试使用composer将第三方库自动加载到我的ZF2应用程序中 - 特别是Google api。 我在this post上关注了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 Googleanalytics\Google_Client;

我已经尝试重命名目录,以防 - 如果是问题,并且在该目录中创建一个简单的test.php文件,以防类名(Google_Client.php)中的下划线出现问题,但仍然是同样的错误

我需要添加到我的ZF2应用程序中以自动加载此库吗? 另请注意,我决定不使用ZendGdata,因为此组件似乎不再维护。 提前致谢

2 个答案:

答案 0 :(得分:1)

软件的自动加载定义不应包含任何供应商模块的自动加载定义。将其移至您用于包含软件的包定义。

在其他新闻中:如果它不能与PSR-0一起使用,那么classmap自动加载器应该处理它。

更新

如何为不提供composer.json的存储库创建软件包

基本上你只需要几条信息:

  1. 版本号及其在该存储库中的位置。
  2. 您尝试使用的软件名称 - 您可能只想添加供应商名称,而不是对该模块过于有创意。
  3. 知道如何自动加载包,即知道软件使用的路径并将classmap自动加载器应用于该软件包。
  4. 以下至少一项,最好是两者:
    1. 托管代码的存储库的URL
    2. 下载已发布版本的网址
  5. 如果是“google-api-php-client”,则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会意外删除手动下载的软件包。

答案 1 :(得分:1)

对于任何想要使用作曲家向ZF2添加第三方库的人来说,以下是适用于我的步骤。

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

    “autoload”:{     “classmap”:[“vendor / PATH TO LIBRARY”] }

  3. 运行php composer.phar update

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

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

    $client = new \Google_Client();