【问题标题】:Why am I getting error Class not found even if the class does exist and is correctly namespaced为什么即使类确实存在并且命名空间正确,我也会收到错误 Class not found
【发布时间】:2021-03-09 18:34:54
【问题描述】:

我正在尝试开发一个包,我们的某些应用程序将需要该包。但是,当我在应用程序中使用 composer 需要它时,我无法测试该包。

包有如下composer.json:

{
    "name": "armcanada/target-horaire",
    "type": "library",
    "license": "MIT",
    "description": "",
    "authors": [
        {
            "name": "Anthony Duhaime",
            "email": "aduhaime@armcanada.ca"
        }
    ],
    "require": {},
    "autoload": {
        "psr-4": {
            "Armcanada\\TargetHoraire\\": "src/"
        }
    },
    "minimum-stability": "dev"
}

该包具有以下目录结构并具有以下测试类:

在 composer.json 中的另一个应用程序中需要该包:

"require": {
    "armcanada/target-horaire": "dev-master"
}
"repositories": [
        {
            "type": "path",
            "url": "../target-horaire"
        }
    ]

最后,我正在导入类并调用test() 方法:

use Armcanada\TargetHoraire\Models\Timeline;

...

dd((new Timeline())->test());

它导致以下错误: "Class 'Armcanada\TargetHoraire\Models\Timeline' not found"

我在应用和包里都试过composer dumpautoload,还是没有效果。

我还尝试删除供应商文件夹和 package-lock.json 然后运行composer install,我现在收到错误: include(/app/vendor/composer/../armcanada/target-horaire/src/Models/Timeline.php): failed to open stream: No such file or directory。但是,该文件确实存在:

我做错了什么?

【问题讨论】:

  • 真的安装了吗?
  • 是的,我可以在我的供应商文件夹中看到它
  • 如果你查看vendor/composer/autoload_psr4.php,你看到命名空间了吗?
  • 是的,它是这样设置的:'armcanada\\TargetHoraire\\' => array($vendorDir . '/armcanada/target-horaire/src'), 应该是大写A的Armcanada,为什么composer-dumpaotoload没有解决这个问题?我该怎么办?
  • 有趣的...希望它是Armcanada\\... 而不是armcanada\\...;有点奇怪

标签: php laravel package composer-php autoload


【解决方案1】:

我想你忘了

extends PHPUnit_Framework_TestCase

在`Timeline.php

如果使用自动加载,请尝试

phpunit --bootstrap src/autoload.php

【讨论】:

  • 这不是一个测试用例,它只是我创建的一个类,用于验证我可以在另一个应用程序需要时使用我的包。
  • 请为您的答案添加一些解释。为什么要添加extend 来解决给定的错误消息?
猜你喜欢
  • 2020-05-17
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
  • 2019-10-05
  • 2020-10-25
相关资源
最近更新 更多