How to I use Composer to autoload classes from outside the vendor?

后端 未结 1 1399
深忆病人
深忆病人 2020-12-03 02:06

I use psr-4 autoloader from composer:

\"autoload\": {
    \"psr-4\": {
        \"DG\\\\Munchkin\\\\\": \"src/DG/Munch/\"
    }
}
相关标签:
1条回答
  • 2020-12-03 02:11

    The src directory would be in your project root. Its on the same level as vendor directory is.

    If you define

    "autoload": {
        "psr-4": {
            "DG\\Munchkin\\": "src/DG/Munch/"
        }
    }
    

    this will not load classes from /var/www/html/xxx/vendor/yyy/src/DG/Munch, like you stated.

    Because your project structure is:

    /var/www/html/
     +- /xxx (project)
         - composer.json
         +- /src
            +- DG
               +- Munch
         +- /vendor
            - autoload.php
            +- vendor-projectA
            +- vendor-projectB
            +- yyy
    

    The \DG\Munchkin namespace would map to classes inside

    /var/www/html/xxx/src/DG/Munch and not inside

    /var/www/html/xxx/vendor/yyy/src/DG/Munch.

    But how can I load classes from /var/www/html/xxx/?

    Define the paths in the composer.json (inside /var/www/html/xxx/) of your project:

    "autoload": {
        "psr-4": {
            "ProjectRoot\\" : "", 
            "NamspaceInSourceDir\\" : "src/"         
        }
     }
    

    or load the composer autoloader in your index.php or during it's bootstrap and add the paths manually:

    $loader = require 'vendor/autoload.php';
    $loader->add('Namespace\\Somewhere\\Else\\', __DIR__);
    $loader->add('Namespace\\Somewhere\\Else2\\', '/var/www/html/xxx');
    

    Referencing: https://getcomposer.org/doc/04-schema.md#autoload

    0 讨论(0)
提交回复
热议问题