Un prefijo PSR-4 que no esté vacío debe terminar con un separador de espacio de nombres

89

Estoy tratando de configurar PSR-4 con Composer pero solo obtengo A non-empty PSR-4 prefix must end with a namespace separator.

Mi autoloaden mi se composer.jsonve así:

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

app/models esta vacio.

¿Qué estoy haciendo mal? ¿Cómo puedo arreglar esto?

Marwelln
fuente

Respuestas:

173

Alguien hizo un comentario pero lo eliminó. Mencionó que faltaba \\al final de Acme\\models. Acme\\models\\eliminará el mensaje y funcionará como debería.

Marwelln
fuente
6
Sí, PSR-4requiere la barra inclinada final. (bueno, el doble, ya que hay que escapar)
Connor Tumbleson
3
Debo decir que este no es solo un requisito estúpido, la especificación también deja muy claro que este es el caso. De ahí la razón por la que me presento aquí por un tema muy básico.
aross
18
Después de usar esta respuesta, también descubrí que composer validatetambién te da una buena indicación de lo que está mal.
Dave
esto causa problemas al usar la ruta del tipo de repositorio, relativa, con enlace simbólico, ya que parece que intenta recrear de alguna manera el enlace simbólico justo después de esta operación y tiene composer.json obsoleto o almacenado en caché
FantomX1
0

Como dijeron otros PSR-4 requires the trailing slash

A pesar de que tenía que convertir /a \\en Windows (debería funcionar bien en Linux):

    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "App\\Tests\\": "tests/"
        }
    },
M en
fuente