4

我正在使用 google drive api 在 symfony2 中打包。我在 Utils 文件夹中有一个类:Authentication,它与来自 google 的文件(我放在完全相同的文件夹中)进行交互,我想将这些文件包含在我的 Authentication.php 中。

我包括这样的:

require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';
require_once 'google-api-php-client/src/contrib/Google_Oauth2Service.php';

但我得到这个错误:

致命错误:: main()无法打开所需的“google-api-php-client\src\Google_Client.php”

4

1 回答 1

11

当你构建一个 Bundle 时,你应该使用框架函数并使用集成的自动加载器。

不要与框架抗争

在您的情况下,我希望您的 Bundle 中有一个Service文件夹。然后你可以把你的谷歌类放在那个文件夹中,并在正确的命名空间中构建一个代理类并抽象你的谷歌代码。

在 Service 类中,您可以使用 require 导入您的库,也可以通过 composer 加载源代码。我们在这里使用最简单的方法。

<?php    
namespace MySF2Bundle\Service;

require_once __DIR__.'/google-api-php-client/src/Google_Client.php'
...

class GoogleAPIWrapper {
    public function getGoogleDriveConnection() {
       /**
        * Implement the Google drive functions
        */
    }
}

然后,您可以在导入命名空间时在 Bundle 中使用它:

use MySF2Bundle\Service\GoogleAPIWrapper;

使用此方法,您可以从 Bundle Code 中抽象出 Google API,并且可以使用更好的结构。您可能会在命名空间方面遇到一些麻烦。但是你可以测试一下。

否则,您可以查看 Github 上的其他捆绑包如何实现外部库。

这是另一种方式:

http://www.kiwwito.com/article/add-third-party-libraries-to-symfony-2 添加外部库到 Symfony2 项目

所以你可以实现完整的lib并在symfony2自动加载器中加载库

$loader->registerPrefixes(array(
    'Google' => __DIR__.'/../vendor/Google/Drive/',
));

因此,您会看到实现外部库的一些可能性。

于 2012-11-19T16:45:17.723 回答