Question

I'm trying to setup PSR-4 with Composer but I'm just getting A non-empty PSR-4 prefix must end with a namespace separator.

My autoload in my composer.json looks like this:

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

app/models is empty.

What am I doing wrong? How can I fix this?

Was it helpful?

Solution

Someone made a comment but removed it. He mentioned I was missing \\ at the end of Acme\\models. Acme\\models\\ will get rid of the message and work as it should.

OTHER TIPS

As others said PSR-4 requires the trailing slash

Though I had to convert / to \\ in Windows (should work fine on Linux):

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

A non-empty PSR-4 prefix must end with a namespace separator. namespace separator means \\

  • Method-1

Incorrect ⬇️⬇️⬇️

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

Correct ⬇️⬇️⬇️

"autoload": {
    "psr-4": {
        "Acme\\models" : "app/models/"
    }
},
  • Method-2: If this doesn't work try deleting vendor + composer.lock and reinstall dependencies
  • Method-3: Delete the autoload_psr4.php file in the libraries folder - it probably was created before the update and it had issues before.

Know more about PSR-4: Autoloader

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top