«Непустой префикс PSR-4 должен заканчиваться разделителем пространства имен» - PullRequest
0 голосов
/ 16 февраля 2019

Я создаю приложение со следующей структурой:

├── 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.

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

Если вам нужно найти префикс в одном месте, нет необходимости добавлять его в.

документация:

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 голосов
/ 01 мая 2019

Поскольку у меня возникла та же проблема, я нашел свое решение на веб-сайте композитора, и здесь я вставил его:

Под ключом 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/" }
}
}

Композитор PSR-4 Doc

0 голосов
/ 18 февраля 2019

Я думаю, у вас на квадратные скобки больше, чем нужно ... попробуйте удалить их, это будет выглядеть так:

{
    "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/"
         }
     }
}
...