我正在构建一个具有以下结构的应用程序:
├── 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。
我认为你有一个方括号超过你需要...尝试删除它们将像:
{
"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这样的类时,指向目录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/" }
}
}