【问题标题】:Composer PSR4 weird behavior作曲家 PSR4 奇怪的行为
【发布时间】:2016-04-13 18:53:56
【问题描述】:

不久前,我创建了一个树枝扩展。最近我添加了一个命名空间,以便我可以更轻松地与 composer 一起使用它。我已经这样做了几次,它适用于其他文件/类。

问题在于,如果我在 composer 中更新或转储自动加载时使用 -o 选项(优化),它只会正确自动加载。

因此,例如,如果我运行composer dumpautoload -o,我的班级就没有问题。如果我运行composer dumpautoload,它将不起作用并给我以下错误:

Fatal error: Class 'Crecket\custom_twig_extension' not found in C:\Dropbox\Ampps\www\crecket.dev\index.php on line 24

我的扩展类:

namespace Crecket;

class custom_twig_extension extends \Twig_Extension{
    // The code
}

我的作曲家文件

"autoload": {
    "psr-4": {
        "Crecket\\": "src/"
    }
}

文件夹结构

src/custom_twig_extension.php

有人知道这是什么原因吗?我似乎无法弄清楚是什么原因造成的。我猜这与作曲家在使用优化时创建类图有关。

【问题讨论】:

  • 您的设置对我来说效果很好。检查几件事。确保您需要来自index.php 的vendor/autoload.php。还要检查每个命令后的vendor/composer/autoload_classmap.php 和vendor/composer/autoload_psr4.php,看看是否能给你任何见解。
  • @JustinHoward 该类在 psr4.php 文件中可见,但我使用get_declared_classes() 签入了我的 index.php 文件,但未在其中列出。我现在真的很无知。我什至尝试添加/删除额外的命名空间和更改文件夹
  • 我也有同样的问题.. 仍然不知道为什么或如何解决它

标签: php composer-php psr-4


【解决方案1】:

我遇到了类似的问题,原来是因为我的文件中的类名与提供它的文件名不同。我有 myclass.php 和 class MyClass { }

根据 reddit 关于某人遇到类似问题的讨论 (https://www.reddit.com/r/laravel/comments/2zx3in/l5_composer_dumpautoload_gives_class_not_found/):

在 PSR-4 中,您必须将文件命名为类的名称。

当我将 myclass.php 重命名为 MyClass.php 时,问题消失了 - 仔细检查您是否使用了相同的名称(和大小写!)!

【讨论】:

    猜你喜欢
    • 2014-11-13
    • 2018-01-24
    • 2017-02-05
    • 2018-04-22
    • 2017-07-07
    • 2010-12-31
    • 2017-07-27
    • 1970-01-01
    • 2016-07-27
    相关资源
    最近更新 更多