문제

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?

도움이 되었습니까?

해결책

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.

다른 팁

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top