PHP Composer无法找到自动加载的文件

时间:2018-06-17 16:46:32

标签: php composer-php autoload

我正在尝试自动加载文件,我的PSR-4自动加载在本地工作正常,但现在我正在部署到裸机服务器。它无法正常工作,PHP声明无法找到自动加载的文件。这是当前的错误:

  

致命错误:第25行的/usr/www/users/metabase/src/commands/ArticleFetchCron.php中找不到“Metabase \ Models \ Cron”类

我的composer.json如下:

{
"require": {
    "vlucas/phpdotenv": "^2.4",
    "guzzlehttp/guzzle": "6.3",
    "monolog/monolog": "^1.23",
    "illuminate/http": "^5.7@dev"
},
"autoload": {
    "psr-4": {"Metabase\\": "src/"}
}
}

出现问题的文件就我所知正确包含名称空间:

<?php

namespace Metabase\Commands;

// autoload composer
require_once(__DIR__ . '/../../vendor/autoload.php');

/**
 * Class ArticleFetchCron
 * @package Metabase\Commands
 */
use Metabase\Api\Requests\ArticleRequest;
use Metabase\Models\Cron;
use Metabase\Models\CronInterface;
use Metabase\Models\DatabaseAdapter;

class ArticleFetchCron extends Cron
implements CronInterface

我只是想知道我的composer.json文件是否犯了错误?

1 个答案:

答案 0 :(得分:2)

当被要求查找Metabase\Models\Cron时,Composer实现的基于PSR-4的类自动加载器会查找名为src\Models\Cron.php的文件。如果您的实际文件在路径上的任何位置使用不同的大小写,例如src\models\Cron.php,您将获得不同的结果,具体取决于基础文件系统是否区分大小写。原因很简单:

  • 如果文件系统区分大小写,它实际上可以包含两个名为src\modelssrc\Models的目录,并且您加载的是错误的目录。

  • 如果不是,则两条路径实际上都与所有效果相同。

仔细检查文件名并使用composer dump-autoload重建自动加载器。

此外,如果您正在进行跨平台开发,我建议您到处使用Unix风格的路径分隔符。它们更容易打字; - )

"autoload": {
    "psr-4": {"Metabase/": "src/"}
}