【问题标题】:How to load libraries that use composer?如何加载使用作曲家的库?
【发布时间】:2013-06-16 05:56:22
【问题描述】:

我正在尝试使用 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,我会收到错误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__ 常量也可用。

【问题讨论】:

    标签: php installation dependencies composer-php


    【解决方案1】:

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

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

    namespace League\OAuth2\Client\Provider;
    
    class Facebook extends IdentityProvider
    {
    

    【讨论】:

    • 有时答案隐藏在飞机视野中-.- 谢谢。通往地狱的道路上到处都是复制和粘贴的盘子:P
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢! +1 我正在运行 php 5.3。 __DIR__ 常量也可用。 “包含类加载器”是什么意思?就我对作曲家的使用基本正确而言,我是否正确解释了您的回复?
    • 哦,如果您运行的是 5.3,那么我的回答没有多大帮助!!我的意思是使用 include() 或 require() 包含它
    猜你喜欢
    • 2018-08-26
    • 2018-09-29
    • 2013-12-09
    • 2015-10-22
    • 2016-10-20
    • 2013-03-05
    • 2015-09-24
    • 1970-01-01
    相关资源
    最近更新 更多