如何在CakePHP 2项目中正确导入Google PHP SDK实现Google+认证
在CakePHP 2中正确导入Google PHP SDK实现Google+认证
我完全懂你现在的困扰——新版Google PHP SDK的目录结构和旧版差很多,CakePHP 2自带的App::import机制根本适配不了,网上那些老教程自然也就没用了。下面给你一步步捋清楚正确的导入方式:
第一步:先把目录结构调对(重中之重!)
你说把下载的SDK里的src文件夹放到了app/Vendor/Google目录下,这会导致路径嵌套太深。正确的操作是:把src文件夹里的所有内容(不是src文件夹本身)复制到app/Vendor/Google目录下。
调整完之后,你应该能看到这些路径:
app/Vendor/Google/Client.phpapp/Vendor/Google/Service/Plus.phpapp/Vendor/Google/autoload.php(如果SDK自带这个文件的话)
第二步:在控制器里加载SDK
新版Google SDK自带自动加载器,这是最简单的加载方式,直接在控制器的方法里加这段代码:
// 加载Google SDK的自动加载器 require_once APP . 'Vendor' . DS . 'Google' . DS . 'autoload.php'; // 现在可以正常实例化客户端了 $client = new Google_Client(); // 如果要用到Google+服务,继续实例化对应的服务类 $plusService = new Google_Service_Plus($client);
要是你的SDK版本里没有autoload.php(比如从GitHub下载的原始版本可能依赖Composer),可以手动注册自动加载函数来处理类加载:
// 先手动加载核心的Client类 require_once APP . 'Vendor' . DS . 'Google' . DS . 'Client.php'; // 注册自动加载函数,专门处理Google前缀的类 spl_autoload_register(function ($className) { if (strpos($className, 'Google_') === 0) { // 把类名里的下划线转换成目录分隔符 $classFilePath = str_replace('_', DS, $className); require_once APP . 'Vendor' . DS . 'Google' . DS . $classFilePath . '.php'; } }); // 现在所有Google SDK的类都能正常调用了 $client = new Google_Client();
为啥之前的App::import不管用?
CakePHP 2的App::import('Vendor', 'Google')只会尝试加载app/Vendor/Google.php或者app/Vendor/Google/Google.php这两个文件,但新版Google SDK的核心类是Google_Client,对应的文件是Google/Client.php,和CakePHP的自动加载规则不匹配,所以没法直接用App::import加载。
内容的提问来源于stack exchange,提问作者David Laird
相关产品推荐
相关产品推荐

