非空 PSR-4 前缀必须以命名空间分隔符结尾
Posted
技术标签:
【中文标题】非空 PSR-4 前缀必须以命名空间分隔符结尾【英文标题】:A non-empty PSR-4 prefix must end with a namespace separator 【发布时间】:2014-02-23 03:57:35 【问题描述】:我正在尝试使用 Composer 设置 PSR-4,但我刚刚收到 A non-empty PSR-4 prefix must end with a namespace separator.
我的composer.json
中的autoload
看起来像这样:
"autoload":
"psr-4":
"Acme\\models" : "app/models"
,
app/models
为空。
我做错了什么?我该如何解决这个问题?
【问题讨论】:
【参考方案1】:有人发表了评论但将其删除。他提到我在Acme\\models
的末尾缺少\\
。 Acme\\models\\
将删除该消息并按应有的方式工作。
【讨论】:
是的,PSR-4
需要尾部斜杠。 (由于需要转义,所以加倍)
我必须说这不仅是一个愚蠢的要求,spec 也非常清楚地表明了这种情况。因此,我出现在这里的原因是一个非常基本的问题。
使用这个答案后,我还发现composer validate
也可以很好地说明问题所在。
这会导致在使用存储库类型路径、相对、符号链接时出现问题,因为它似乎试图在此操作之后以某种方式重新创建符号链接并且具有过时或缓存的 composer.json
我这样做了,但仍然出现同样的错误,我应该删除供应商还是清除一些缓存?【参考方案2】:
正如其他人所说PSR-4 requires the trailing slash
虽然我必须在 Windows 中将 /
转换为 \\
(在 Linux 上应该可以正常工作):
"autoload":
"psr-4":
"App\\": "src/"
,
"autoload-dev":
"psr-4":
"App\\Tests\\": "tests/"
,
【讨论】:
以上是关于非空 PSR-4 前缀必须以命名空间分隔符结尾的主要内容,如果未能解决你的问题,请参考以下文章