作曲家 PSR4 奇怪的行为

Posted

技术标签:

【中文标题】作曲家 PSR4 奇怪的行为【英文标题】:Composer PSR4 weird behavior 【发布时间】: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.phpvendor/autoload.php。还要检查每个命令后的vendor/composer/autoload_classmap.phpvendor/composer/autoload_psr4.php,看看是否能给你任何见解。 @JustinHoward 该类在 psr4.php 文件中可见,但我使用get_declared_classes() 签入了我的 index.php 文件,但未在其中列出。我现在真的很无知。我什至尝试添加/删除额外的命名空间和更改文件夹 我也有同样的问题.. 仍然不知道为什么或如何解决它 【参考方案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 时,问题消失了 - 仔细检查您是否使用了相同的名称(和大小写!)!

【讨论】:

以上是关于作曲家 PSR4 奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章

removeFromParent() 奇怪的行为

parseInt() 函数的奇怪行为

QLcdNumber 奇怪的行为

iOS奇怪的委托行为?

AdditionalSafeAreaInsets 的奇怪行为

UITableView 奇怪的行为