Непустой префикс PSR-4 должен заканчиваться разделителем пространства имен.

91

Я пытаюсь настроить PSR-4 с помощью Composer, но получаю A non-empty PSR-4 prefix must end with a namespace separator.

Моя autoloadпо-моему composer.jsonвыглядит так:

"autoload": {
    "psr-4": {
        "Acme\\models" : "app/models"
    }
},

app/models пусто.

Что я делаю неправильно? Как я могу это исправить?

Marwelln
источник

Ответы:

177

Кто-то оставил комментарий, но удалил его. Он упомянул, что я пропал без вести \\в конце Acme\\models. Acme\\models\\избавится от сообщения и будет работать как надо.

Marwelln
источник
6
Да, PSR-4требуется косая черта в конце. (ну вдвойне, так как от него нужно сбежать)
Коннор Тамблсон
3
Я должен сказать, что это не только глупое требование, но и в спецификации предельно ясно сказано, что это так. Отсюда причина, по которой я появляюсь здесь по очень простой проблеме.
aross
18
После использования этого ответа я также обнаружил, что он composer validateтакже дает вам хорошее представление о том, что не так.
Дэйв
это вызывает проблемы при использовании пути типа репозитория, относительного, с символической ссылкой, поскольку кажется, что он пытается каким-то образом воссоздать символическую ссылку сразу после этой операции и имеет устаревший или кешированный composer.json
FantomX1
0

Как говорили другие PSR-4 requires the trailing slash

Хотя я должен был преобразовать /в \\в ОС Windows (должно работать нормально на Linux):

    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "App\\Tests\\": "tests/"
        }
    },
М в
источник