php - 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
解决方案
显然 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
推荐阅读
- excel - 清除 ActiveX 下拉框错误 438
- apache-camel - HttpOperationFailedException 可用于 apache 的 http4 吗?
- reactjs - 我可以覆盖组件中单个查询的 Apollo Client 标头吗?
- javascript - Angular8 cdk:拖放在网格上不起作用
- python - 列表中的唯一文件名
- jquery - 如何在 jQuery 中编写 If 语句以减少代码
- mongodb - FindOneAndUpdate 函数不更新数据库
- javascript - JavaScript工厂函数修改闭包范围外的变量
- cypress - 单击元素失败,因为它错误地认为它是不可见的
- mysql - 如何避免在每个 MySql 查询中使用数据库名称