“非空的PSR-4前缀必须以命名空间分隔符结尾”

问题描述 投票:-1回答:3

我正在构建一个具有以下结构的应用程序:

├── README.md
├── composer.json
├── index.php
└── src
    └── test.php

...而我的composer.json文件如下所示:

{
    "minimum-stability" : "alpha",
    "name" : "patrick/changedetection",
    "description" : "A change detection script for observing additions to web pages",
    "license" : "MIT",
    "autoload" : {
        "psr-4" : {
            "patrick\\changedetection\\" : [
                "src/"
            ]
        }
    }
}

但是当我运行composer install时,我得到了

[InvalidArgumentException]非空PSR-4前缀必须以命名空间分隔符结尾。

为了正确自动加载我的test.php文件,我需要做什么?

===

编辑:这是使用Composer版本1.8.4。

php composer-php autoload
3个回答
1
投票

我认为你有一个方括号超过你需要...尝试删除它们将像:

{
    "minimum-stability" : "alpha",
    "name" : "patrick/changedetection",
    "description" : "A change detection script for observing additions to web pages",
    "license" : "MIT",
    "autoload" : {
         "psr-4" : {
              "patrick\\changedetection\\" : "src/"
         }
     }
}

1
投票

如果您需要在单个位置搜索前缀,则无需添加。

文档:

https://getcomposer.org/doc/04-schema.md#psr-4这就是你的解决方案的原因

{
    "minimum-stability" : "alpha",
    "name" : "patrick/changedetection",
    "description" : "A change detection script for observing additions to web pages",
    "license" : "MIT",
    "autoload" : {
         "psr-4" : {
              "patrick\\changedetection\\" : "src/"
         }
     }
}

如果需要在多个目录中搜索相同的前缀,可以将它们指定为数组:

{
    "autoload": {
        "psr-4": { "Monolog\\": ["src/", "lib/"] }
    }
}

0
投票

因为我有同样的问题,我在作曲家的网站上找到了我的解决方案,在这里我粘贴它:

在psr-4键下,您可以定义从命名空间到路径的映射,相对于包根。当自动加载像Foo \ Bar \ Baz这样的类时,指向目录src /的名称空间前缀Foo \意味着自动加载器将查找名为src / Bar / Baz.php的文件并包含它(如果存在)。请注意,与旧的PSR-0样式相反,文件路径中不存在前缀(Foo \)。

命名空间前缀必须以\结尾,以避免类似前缀之间的冲突。例如,Foo将匹配FooBar命名空间中的类,因此尾部反斜杠可以解决问题:Foo \和FooBar \是不同的。

PSR-4引用在安装/更新期间全部组合成单个key => value数组,该数组可以在生成的文件vendor / composer / autoload_psr4.php中找到。

例:

{
"autoload": {
    "psr-4": {
        "Monolog\\": "src/",
        "Vendor\\Namespace\\": ""
    }
}
}

如果需要在多个目录中搜索相同的前缀,可以将它们指定为数组:

{
"autoload": {
    "psr-4": { "Monolog\\": ["src/", "lib/"] }
}
}

如果您想要一个可以查找任何命名空间的回退目录,您可以使用如下的空前缀:

{
"autoload": {
    "psr-4": { "": "src/" }
}
}

Composer psr-4 Doc

© www.soinside.com 2019 - 2024. All rights reserved.