我正在使用google drive api在symfony2中进行捆绑。我在Utils文件夹中有一个类:身份验证与谷歌的文件交互(我放在那个完全相同的文件夹中),我想在我的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'
答案 0 :(得分:11)
构建Bundle时,您应该使用框架函数并使用集成的自动加载器。
不要与框架作斗争
在您的情况下,我更喜欢您的Bundle中的服务文件夹。然后,您可以将google类放在该文件夹中,并构建一个位于正确名称空间的Proxy类,并抽象出您的Google代码。
在Service类中,您可以使用require导入lib,也可以在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上的其他bundle如何实现外部库。
这是另一种方式:
http://www.kiwwito.com/article/add-third-party-libraries-to-symfony-2 Add external libraries to Symfony2 project
因此,您可以在symfony2自动加载器中实现完整的lib并加载库
$loader->registerPrefixes(array(
'Google' => __DIR__.'/../vendor/Google/Drive/',
));
所以你看到有一些实现外部库的可能性。