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会在update
,install
等上生成这些内容。
但是,每当我在浏览器中加载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搜索的前几页上的每个链接都显示为紫色,到目前为止我没有尝试过的任何内容都适用于我,所以我确定我只是错过了一步或什么的。
答案 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"
}
},