Composer autoload - load class from the parent directory

I am currently working on a Laravel project that needs to access classes from its parent directory.

composer.json> PSR-4:

    "psr-4": {
        ...
        "ModuleA\\": "../ModuleA/baseObjects",
        "ModuleB\\": "../ModuleB/baseObjects"
    }

Example file structure:

/var/www
 +- /xxx (project)
     +- /ModuleA
        +- /baseObjects
            - configClass.inc
     +- /ModuleB
        +- /baseObjects
            - configClass.inc
     +- /laravel
        - composer.json

I am running composer dump-autoload, but the project still cannot find ModuleA\configClasseither ModuleB\configClass.

Also, inside my autoload_psr4.php, the above refers to the following:

'MobuleA\\' => array($baseDir . '/../MobuleA/baseObjects')
'MobuleB\\' => array($baseDir . '/../MobuleB/baseObjects')

Thanks in advance.

+6
source share
5 answers

PSR-4 , , " ", (http://www.php-fig.org/psr/psr-4/).

, /var/xxx/ModuleA/baseObjects/configClass.inc

namespace ModuleA\baseObjects;

class configClass {
    ...
}

var/www/laravel/composer.json

    "psr-4": {
        "App\\": "app/",
        "ModuleA\\": "../ModuleA"
    }

: "directory ../ModuleA ModuleA, , ".

+4

, , . , Composer.json .

.inc, PSR-4. : (PSR-4) .class.php " ?

PSR-4, :

classmap / key = > value, vendor/composer/autoload_classmap.php. .php .inc /.

classmap , PSR-0/4. , .

, :

"autoload": {
    "classmap": [
        "../ModuleA/baseObjects",
        "../ModuleB/baseObjects"
    ]
}

, , composer dump-autoload composer.json, , /_/ ..

:, @alepeino, PSR -0 PSR-4, , classmap autoload. PSR-4 .inc. , composer dump-autoload --optimize , , , classmap.

: , PSR-4, .php.

, : classmap .

+1

:

"psr-4": {
        ...
        "ModuleA\\": "ModuleA/baseObjects",
        "ModuleB\\": "ModuleB/baseObjects"
 }
0

According to this answer, you can add it to the index.php file:

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

Using classmap autoload will solve this problem.

{
...
"autoload": {
        "classmap": ["ModuleA/", "ModuleB/"]
    }
}

It can be used with PSR-4

{
    ...
    "autoload": {
            "psr-4": { 
                "Acme\\": "src/Acme/"
            },
            "classmap": ["ModuleA/", "ModuleB/"]
        }
    }

Link: https://getcomposer.org/doc/04-schema.md#classmap

0
source

All Articles