首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP Composer找不到自动加载的文件

PHP Composer找不到自动加载的文件
EN

Stack Overflow用户
提问于 2018-06-18 00:46:32
回答 1查看 513关注 0票数 1

我正在尝试自动加载一个文件,我的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文件弄错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-18 01:13:45

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

  • 如果文件系统区分大小写,则物理上可能包含名为src\modelssrc\Models的两个目录,而您加载的目录是错误的。
  • 如果不是,则这两个路径实际上对所有效果都是相同的。

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

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

"autoload": {
    "psr-4": {"Metabase/": "src/"}
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50898633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档