我正在构建具有以下结构的应用程序:
├── 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版。
答案 0 :(得分: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 :(得分: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/"] }
}
}
答案 2 :(得分:0)
由于我有同样的问题,我在作曲家的网站上找到了解决方案,然后将其粘贴在这里:
在psr-4键下,定义相对于程序包根目录的从名称空间到路径的映射。当自动加载诸如Foo \ Bar \ Baz之类的类时,名称空间前缀Foo \指向目录src /意味着自动加载器将查找名为src / Bar / Baz.php的文件,如果存在,则将其包括在内。请注意,与较早的PSR-0样式相反,文件路径中不存在前缀(Foo \)。
命名空间前缀必须以\结尾,以避免相似前缀之间的冲突。例如,Foo将匹配FooBar命名空间中的类,因此尾随反斜杠可以解决问题:Foo \和FooBar \是不同的。
在安装/更新期间,所有PSR-4引用都合并到一个键=>值数组中,该数组可以在生成的文件vendor / composer / autoload_psr4.php中找到。
示例:
{
"autoload": {
"psr-4": {
"Monolog\\": "src/",
"Vendor\\Namespace\\": ""
}
}
}
如果您需要在多个目录中搜索相同的前缀,则可以将它们指定为数组,如下所示:
{
"autoload": {
"psr-4": { "Monolog\\": ["src/", "lib/"] }
}
}
如果您想在某个备用目录中查找任何名称空间,则可以使用空前缀,例如:
{
"autoload": {
"psr-4": { "": "src/" }
}
}