0

我正在尝试使用https://github.com/php-loep/oauth2-client作为 oauth 2.0 库。

它具有需要使用 composer 安装的依赖项。

我尝试按照手册进行操作,一切似乎都很好,但是我无法使其正常工作!

我将存储库克隆到一个文件夹,我在其中下载了 composer 并安装了依赖项。这会生成一个独特的自动加载文件。

现在我的理解是我只需要这个自动加载文件并且应该很好。这就是我所做的,但是它无法解析我需要加载的类的类名。在我的情况下,这将是\OAuth2\Client\Provider\Facebook

该库的使用记录在这里:https ://github.com/php-loep/oauth2-client/blob/master/README.md

为了确保我没有提供任何模棱两可的信息,我创建了这个简短的 shell 脚本(脚本不会说谎!),它重现了我所采取的步骤。如果我在一个空文件夹中运行它,然后foo.php从命令行或 Web 浏览器运行创建的文件,我会收到错误消息PHP Fatal error: Class 'OAuth2\Client\Provider\Facebook' not found in /var/www/test/foo.php on line 1

这是脚本...

git clone https://github.com/php-loep/oauth2-client.git
cd oauth2-client
curl -sS https://getcomposer.org/installer | php
php composer.phar install
cd ..
echo "<?php ini_set('display_errors',1); require_once 'oauth2-client/vendor/autoload.php'; \$provider = new \OAuth2\Client\Provider\Facebook(array()); " > foo.php

我做错了什么?我误解了作曲家的概念吗?如果有,请赐教!

我还尝试将文件移动到文件foo.phpoauth2-client中,但没有任何改变。

我正在运行 php 5.3,并且该__DIR__常量也可用。

4

2 回答 2

1

在您的 foo.php 中,Facebook 类使用了错误的命名空间。你错过了这部分:\League.

oauth2-client/src/League/OAuth2/Client/Provider/Facebook.php:

namespace League\OAuth2\Client\Provider;

class Facebook extends IdentityProvider
{
于 2013-06-19T17:50:07.770 回答
1

似乎它可能与命名空间有关。如果您运行的是 PHP 5.2,您会遇到问题,因为在 PHP 5.3 之前不支持命名空间:(

无论如何,要解决这个问题,您需要进入一些作曲家文件并更改一些内容。我不得不编辑 autoload_real.php 以包含类加载器并将DIR替换为 dirname( FILE )。不确定这是否是最好的方法,但我通过这样做得到了它。

于 2013-06-19T16:55:46.707 回答