非空 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 前缀必须以命名空间分隔符结尾的主要内容,如果未能解决你的问题,请参考以下文章

phpsotrm 设置命名空间

psr规范发展历程

针对供应商的 PhpStorm PSR-4 命名空间修复建议

PHP开发命名规范

Monk快速开发框架前期约定

thinkphp5.0开发规范