PHP 未从应由 Composer 自动加载的库中找到 class

PHP doesn't find class from library that should be auto-loaded by Composer

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

我正在使用 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 应该负责生成所有自动加载的东西 composer dump-autoload(据我所知,这是不必要的,因为 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 一段时间了(包括本学期的预科 CS 项目 class),但我的工作知识 PHP 仅限于功能方面;我对它的 OOP 方面没有太多了解。此外,我熟悉类似于 Composer 的 dependency/package 管理器(具体来说,Node.js 的 NPM),但不熟悉 Composer 本身。 TIA!

编辑:忘记添加了——我搜索得够多了,任何给定 Google 搜索的前几页上的每个 link 与相关术语都显示为紫色,但我什么都没有到目前为止尝试对我有用,所以我确定我只是错过了一步或其他东西。

他们的示例似乎不正确,或者可能已更改并且他们忘记更新 README。

如果您查看 Slack 提供程序的源代码,它位于命名空间 Bramdevries\Oauth\Client\Provider.

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

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

希望在那之后你不要 运行 做任何其他事情!

它使用了他们的 composer.json 确实引入的 League 代码,但是要使用这个特定的提供者,您必须在适当的命名空间中引用他们的代码。

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

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