PHP没有从库中找到应该由Composer自动加载的类

时间:2018-04-23 20:35:08

标签: php composer-php apache2

PHP似乎没有找到我试图从Composer自动加载的库中定义的类。

我正在搞乱使用Apache 2.4提供的PHP,我过去曾成功使用它,但是将Composer引入混合对我来说已经证明是麻烦的。我尝试使用an OAuth2 library for Slack,在虚拟主机的文档根目录中使用composer require bramdevries/oauth2-slack成功安装,以便文件结构如下所示:

+-- composer.json
+-- composer.lock
+-- index.php
+-- vendor/
|  +-- autoload.php
|  +-- composer/
|  +-- bramdevries/
|  |   +-- <library files>
|  ... dependencies

这个库是我到目前为止唯一使用的库,我的index.php是整个文档根目录中唯一的源文件composer/内没有库。出于所有意图和目的,该项目大约有3行PHP代码,如下所示。

根据我对the Composer documentation的理解:由于我使用的是提供自己的composer.json的库,因此如果我composer dump-autoload,Composer应该负责生成所有自动加载的内容。 1}}(我认为,这是不必要的,因为Composer会在updateinstall等上生成这些内容。

但是,每当我在浏览器中加载index.php时,Apache2都会以HTTP 500响应。

鉴于上面的文件结构,这是我index.php的全部内容:

<?php
require "vendor/autoload.php";
$slack = new League\OAuth2\Client\Provider\Slack([ /* stuff */ ]);
?>

以下是/var/log/apache2/error.log中发现的错误:

PHP Fatal error: Uncaught Error: Class 'League\\OAuth2\\Client\\Provider\\Slack' not found in <document_root>/index.php:3
Stack trace:
#0 {main}
  thrown in <document_root>/index.php on line 3

所以,我显然做错了什么,但是什么?

我已经使用了Apache2和PHP一段时间了(包括本学期前一个pre-capstone CS项目类的项目),但我对PHP的工作知识仅限于功能方面;我的OOP方面并没有太多混乱。此外,我熟悉与Composer类似的依赖/包管理器(特别是NPM for Node.js),但不熟悉Composer本身。 TIA!

编辑:忘了添加 - 我已经搜索了足够的搜索结果,任何给定Google搜索的前几页上的每个链接都显示为紫色,到目前为止我没有尝试过的任何内容都适用于我,所以我确定我只是错过了一步或什么的。

1 个答案:

答案 0 :(得分:2)

他们的示例似乎不正确,或者可能已更改,他们忘记更新自述文件。

如果您查看Slack提供程序的来源,则它位于名称空间Bramdevries\Oauth\Client\Provider中。

您只需将构造函数更改为:

$slack = new Bramdevries\Oauth\Client\Provider\Slack([ /* stuff */ ]);

希望在那之后你不会遇到任何其他事情!

它使用League引入的composer.json代码,但要使用此特定提供程序,您必须在适当的名称空间中引用它们的代码。

另一个提示是在composer.json中查看他们的自动加载定义:

"autoload": {
    "psr-4": {
        "Bramdevries\\Oauth\\Client\\": "src"
    }
},