"A non-empty PSR-4 prefix must end with a namespace separator"
"A non-empty PSR-4 prefix must end with a namespace separator"
我正在构建具有以下结构的应用程序:
├── 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] A non-empty PSR-4 prefix must end with
a namespace separator.
我需要做什么才能正确地自动加载我的 test.php 文件?
===
编辑:这是使用 Composer 版本 1.8.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/"
}
}
}
如果您需要在单个位置搜索前缀,则无需添加。
文档:
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/"] }
}
}
因为我遇到了同样的问题,我在作曲家的网站上找到了我的解决方案,我把它贴在这里:
在 psr-4 键下,您定义了一个从名称空间到路径的映射,相对于包根目录。当自动加载一个像 Foo\Bar\Baz 这样的 class 时,命名空间前缀 Foo\ 指向目录 src/ 意味着自动加载器将查找名为 src/Bar/Baz.php 的文件,如果当前的。请注意,与旧的 PSR-0 样式相反,文件路径中不存在前缀 (Foo\)。
命名空间前缀必须以 \ 结尾,以避免相似前缀之间的冲突。例如,Foo 将匹配 FooBar 命名空间中的 classes,因此尾部反斜杠解决了问题:Foo\ 和 FooBar\ 是不同的。
在 install/update 期间,PSR-4 引用全部组合成一个键 => 值数组,可以在生成的文件 vendor/composer/autoload_psr4.php.
示例:
{
"autoload": {
"psr-4": {
"Monolog\": "src/",
"Vendor\Namespace\": ""
}
}
}
如果您需要在多个目录中搜索相同的前缀,您可以将它们指定为一个数组:
{
"autoload": {
"psr-4": { "Monolog\": ["src/", "lib/"] }
}
}
如果你想要一个后备目录,可以在其中查找任何命名空间,你可以使用空前缀,例如:
{
"autoload": {
"psr-4": { "": "src/" }
}
}
我正在构建具有以下结构的应用程序:
├── 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] A non-empty PSR-4 prefix must end with a namespace separator.
我需要做什么才能正确地自动加载我的 test.php 文件?
===
编辑:这是使用 Composer 版本 1.8.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/"
}
}
}
如果您需要在单个位置搜索前缀,则无需添加。
文档:
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/"] }
}
}
因为我遇到了同样的问题,我在作曲家的网站上找到了我的解决方案,我把它贴在这里:
在 psr-4 键下,您定义了一个从名称空间到路径的映射,相对于包根目录。当自动加载一个像 Foo\Bar\Baz 这样的 class 时,命名空间前缀 Foo\ 指向目录 src/ 意味着自动加载器将查找名为 src/Bar/Baz.php 的文件,如果当前的。请注意,与旧的 PSR-0 样式相反,文件路径中不存在前缀 (Foo\)。
命名空间前缀必须以 \ 结尾,以避免相似前缀之间的冲突。例如,Foo 将匹配 FooBar 命名空间中的 classes,因此尾部反斜杠解决了问题:Foo\ 和 FooBar\ 是不同的。
在 install/update 期间,PSR-4 引用全部组合成一个键 => 值数组,可以在生成的文件 vendor/composer/autoload_psr4.php.
示例:
{
"autoload": {
"psr-4": {
"Monolog\": "src/",
"Vendor\Namespace\": ""
}
}
}
如果您需要在多个目录中搜索相同的前缀,您可以将它们指定为一个数组:
{
"autoload": {
"psr-4": { "Monolog\": ["src/", "lib/"] }
}
}
如果你想要一个后备目录,可以在其中查找任何命名空间,你可以使用空前缀,例如:
{
"autoload": {
"psr-4": { "": "src/" }
}
}