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.