首页 > 解决方案 > composer dump-autoload -o 跳过我所有的课程

问题描述

我刚刚升级到 Composer 2.0,它显然对它解析类的方式做了一些修改......

composer dump-autoload -o或者别名composer du -o基本上会在我的控制台中转储很多行,其中包含如下文本:

位于 C:/udvikling/MyProjectRoot/src/MyProjectClasses\MyProject\SubCategory\CoolClass.php 的类 MyProject\SubCategory\CoolClass 不符合 psr-4 自动加载标准。跳过

在阅读Composer psr-4 自动加载问题后,我确保所有对我的命名空间和类路径有贡献的名称都是大写的。即use myproject/helperclass现在use MyProject/HelperClass

我的C:/udvikling/MyProjectRoot/src/composer.json包括以下内容

    "autoload": {
        "psr-4": {
            "MyProject\\": "MyProjectClasses/"
        }
    }

我通过在类名中添加一个前导反斜杠来解决这个问题:

<?php

namespace \MyProject\Core;

class Timer {
    //...

但是...根据php.net

名称空间声明中不允许使用完全限定名称(即以反斜杠开头的名称),因为此类结构被解释为相对名称空间表达式。

所以这似乎不是正确的选择......(我的 IDE 在它下面还给了我一条愤怒的波浪线......)

除了回到另一个版本的作曲家之外,我该如何解决这个问题?

文件结构:

C:\udvikling\MyProjectRoot -- the root of the project
C:\udvikling\MyProjectRoot\src --the php sources
C:\udvikling\MyProjectRoot\src\MyProjectClasses -- my PHP classes
C:\udvikling\MyProjectRoot\src\vendor -- my vendor stuff for composer
C:\udvikling\MyProjectRoot\src\composer.json - my composer config

标签: phpnamespacescomposer-php

解决方案


我去做了一些额外的 阅读

显然 psr-4 的目标之一是减少文件夹深度。

“src”和“tests”目录必须包含供应商和包目录名称。>这是 PSR-0 合规性的产物。

许多人发现这种结构比必要的更深、更重复。该提案表明,附加或替代 PSR 将是有用的 [...]

很难通过扩展或修改 PSR-0 来实现面向包的自动加载,因为 PSR-0 不允许类名的任何部分之间存在中间路径。

所以基本上,问题是在我的MyProjectClasses目录中,对于MyProject\Core\Timer我在类似的目录结构中拥有它的类: C:\udvikling\MyProjectRoot\src\MyProjectClasses\MyProject\Core\Timer.php.
这必须更改为不包括基本包: C:\udvikling\MyProjectRoot\src\MyProjectClasses\Core\Timer.php


推荐阅读