Um prefixo PSR-4 não vazio deve terminar com um separador de namespace


91

Estou tentando configurar o PSR-4 com o Composer, mas estou começando A non-empty PSR-4 prefix must end with a namespace separator.

Meu autoloadno meu composer.jsonfica assim:

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

app/models está vazia.

O que estou fazendo errado? Como posso consertar isso?

Respostas:


177

Alguém fez um comentário, mas o removeu. Ele mencionou que eu estava faltando \\no final de Acme\\models. Acme\\models\\eliminará a mensagem e funcionará como deveria.


6
Sim, PSR-4requer a barra final. (bem, o dobro, já que precisa ser escapado)
Connor Tumbleson

3
Devo dizer que este não é apenas um requisito estúpido, a especificação também deixa extremamente claro que este é o caso. Daí a razão pela qual apareço aqui para um problema muito básico.
aross

18
Depois de usar essa resposta, também descobri que ela composer validatetambém dá uma boa indicação do que está errado.
Dave

isso causa problemas ao usar o tipo de repositório path, relative, symlinked, pois parece que tenta recriar de alguma forma o symlink logo após esta operação e tem composer.json obsoleto ou armazenado em cache
FantomX1

0

Como outros disseram PSR-4 requires the trailing slash

Embora eu tivesse que converter /para \\no Windows (deve funcionar bem no Linux):

    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "App\\Tests\\": "tests/"
        }
    },
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.