0

I've been having a little play around with some Composer autoloading and i'm getting some issues so the directory structure is

index.php
app/
   helpers/
          router.php
vendor/
   composer/
          /*usual files*/
   autoload.php

Inside my composer.json I have the following

"autoload": {
        "psr-4": {
            "App\\": "app/"
        }
    }

Inside my index.php I have

<?php
// Autoload our namespaces
require __DIR__.'/vendor/autoload.php';

use App\Helpers\Router;
$route = new Router;

Getting the following error

Fatal error: Class 'App\Helpers\Router' not found in /var/www/public/index.php on line 6

I have tried a few different things to try and get it working but i'm unsure where i'm going wrong. This is my first time looking into autoloading using Composer outside of a framework so would appreciate any guidance.

1 Answer 1

6

PSR-4 is case sensitive. The structure has to be app/Helpers/Router.php or better App with capital A.

All class names MUST be referenced in a case-sensitive fashion.

The subdirectory name MUST match the case of the sub-namespace names.

The terminating class name corresponds to a file name ending in .php. The file name MUST match the case of the terminating class name.

http://www.php-fig.org/psr/psr-4/

Sign up to request clarification or add additional context in comments.

2 Comments

Additional tip: If you've just updated your autoload config in composer.json you can get composer to only regenerate the autoload config with composer dumpautoload rather than waiting for composer update to update its package lists for no raisin.
Thanks it was a mixture of case sensitivity and file name spaces being a little squiffy. Thanks all you've really helped out!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.