如何加载使用composer的库?

时间:2013-06-19 15:46:37

标签: php installer dependencies composer-php

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

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

我试着按照手册进行操作,一切似乎都很好,但是我无法让它工作!

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

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

此处记录了库的用法:https://github.com/php-loep/oauth2-client/blob/master/README.md

为了确保我没有提供任何含糊不清的信息,我创建了这个简短的shell脚本(Scripts不要说谎!),它重现了我采取的步骤。如果我在空文件夹中运行它然后从命令行或Web浏览器运行创建的文件foo.php,我会收到错误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.php移到文件夹oauth2-client中,但没有改变任何内容。

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

的oauth2的客户端/ SRC /联赛/ OAuth2用户/客户端/提供者/ Facebook.php:

namespace League\OAuth2\Client\Provider;

class Facebook extends IdentityProvider
{