【问题标题】:Composer not auto-loading required classes作曲家没有自动加载所需的类
【发布时间】:2017-06-09 21:12:23
【问题描述】:

我是 Composer 的新手,我真的很难用 Composer 自动加载我的课程。我在以下过程中缺少什么?

我将包安装在我的 PHP 包含文件夹中(位于文档根目录之外 - 我不确定这是否重要),如下所示:

composer require monolog\monolog

它表示它已成功完成,我确认该项目已添加到我的供应商文件夹中。

我的整个 composer.json 文件如下所示:

{
    "require": {
        "monolog/monolog": "^1.22"
    }
}

我的整个测试文件如下所示:

<?php

require_once "vendor/autoload.php";
use Monolog\Logger;

$log = new Logger("name");

?>

我在加载页面时收到此错误:

Fatal error: Uncaught Error: Class 'Monolog\Logger' not found in C:\Dropbox\Projects\Web\Websites\Instamation\wwwroot\qbtest.php:6 Stack trace: #0 {main} thrown in C:\Dropbox\Projects\Web\Websites\Instamation\wwwroot\qbtest.php on line 6

它包含 vendor/autoload.php 文件,没有任何错误。

我尝试在 composer 中运行这些命令而不做任何更改:

composer update
composer dump-autoload -0

我也尝试过使用不同的包,但我得到了同样的错误,所以我很确定它与 monolog 包无关。

这里有没有我遗漏的步骤?如果我在 composer 中需要它们,我不需要手动定义要在 json 文件中自动加载的类,对吗?

编辑 1:

根据要求,这是我的不同文件的路径。

测试页面路径:

C:\Dropbox\Projects\Web\Websites\Instamation\wwwroot\qbtest.php

composer.json 文件的路径(在文档根目录之外,但在我的包含路径中):

C:\Dropbox\Projects\Web\Websites\Instamation\wwwincludes\composer.json

我的供应商文件夹在这里:

C:\Dropbox\Projects\Web\Websites\Instamation\wwwincludes\vendor\

在我的供应商文件夹中,我有这些文件夹和文件:

bin/
composer/
monolog/
psr/
autoload.php

【问题讨论】:

  • 请在问题中添加 composer.json 的完整路径以及vendor 目录中的目录列表。
  • @AlexBlex 谢谢。我已经添加了您要求的信息。有什么不好看的吗?

标签: php include composer-php package-managers autoloader


【解决方案1】:

您需要在qbtest.php 中包含自动加载,如下所示:

require_once "../wwwincludes/vendor/autoload.php";
use Monolog\Logger;

$log = new Logger("name");

【讨论】:

  • 哇!那行得通!在深入了解原因后,我发现我的包含路径中有另一个我不知道的位置,并且该位置中有一个旧的作曲家供应商文件,所以它加载了错误的 autoload.php。无论我做什么,它总是会在我的其他包含位置中拾取旧的 autoload.php,并且永远不会加载正确的并工作!太感谢了!我整天都在做这个!
猜你喜欢
  • 2017-01-27
  • 2016-10-24
  • 2014-08-15
  • 2013-12-09
  • 2021-12-18
  • 1970-01-01
  • 2018-10-01
  • 2016-03-06
相关资源
最近更新 更多