【问题标题】:Class not found when using PSR-4 Autoload in Linux, works in Windows在 Linux 中使用 PSR-4 Autoload 时找不到类,在 Windows 中有效
【发布时间】:2018-09-10 08:21:21
【问题描述】:

简介

你好, 我将文件从运行 WAMP 的本地 PC 移动到我的网络服务器,这是一台 Linux 机器。
我与 composer 合作使用它的自动加载功能来加载我的 MVC 结构,稍后会详细介绍。

我在网页上收到的错误如下:
Fatal error: Uncaught Error: Class 'App\Model\DB' not found in <folder_structure>/config/_boot.php:15

我的 Windows 机器上没有这个错误,代码在那里完美运行。

文件夹结构

我使用相同的文件夹结构,它(简化)如下:

- config
-- _boot.php
- dist
-- index.php
-- includes
--- header.php
- src
-- app
--- Models
---- db.php
- composer.json

代码部分

我的config/_boot.php 文件如下所示:

use App\Model\DB;
...
$db = new DB($database['host'], $database['dbname'], $database['user'], $database['password']);

我的src/app/Model/db.php 文件如下所示:

namespace App\Model;
class DB
{
}

我的composer.json 包含以下内容:

"autoload": {
        "psr-4": {
            "App\\": "src/app/"
        },
        "files": [
            "src/app/functions.inc.php",
            "config/_boot.php",
            "src/app/Routing.php"
        ]
    }

autoload_psr4.php

return array(
    ...
    'App\\' => array($baseDir . '/src/app'),
    ...
);

问题

有没有人知道我做错了什么?

我尝试过/检查过的事情

  • 检查文件夹权限
  • 我也尝试将"App\\Model\\": "src/app/Model/" 添加到我的composer.json

PS:这是我在 Stackoverflow 上的第一个问题,欢迎提出改进布局的建议...

【问题讨论】:

    标签: php linux namespaces composer-php psr-4


    【解决方案1】:

    PSR-4 状态:

    终止类名对应于以 .php 结尾的文件名。 文件名必须与终止类名的大小写匹配。

    您将DB 类放入db.php 文件中违反了此规则。它适用于 Windows 而不是 Linux 的原因是后者在文件和文件夹名称方面区分大小写。

    所以解决方法是将db.php 重命名为DB.php

    【讨论】:

    • 感谢您的回复。我现在已将该文件重命名为 DB.php,但它仍然无法正常工作。你还有什么建议吗?我应该将整个 "App\\Model\\": 放在我的 composer.json 中吗?
    • 确实,我仍然有同样的错误。 Class 'App\Model\DB' not found
    • $ ls src/app/Model --> Alert.php CalenderActivity.php Category.php DB.php Leader.php Parsedown.php Registration.php User.php
    • @GodOfNeoN,你有没有调用composer dump-autoload 命令重新生成自动加载文件?
    • 我确实执行了该命令,是的。结果是 - 就像上面的问题一样 - 我在生成的文件中有这个(vendor/composer/autoload_psr4.php):'App\\' => array($baseDir . '/src/app'),
    猜你喜欢
    • 2015-12-10
    • 2014-08-18
    • 2016-11-18
    • 1970-01-01
    • 2017-11-20
    • 2016-11-08
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多