mercredi 30 octobre 2019

Private sub-package 'Class not found' PHP error is fixed after running 'composer dumpautoload'?

I have a Laravel 5.8 project that is dependent on a private package from a private repository.

The private package is dependent on another private package from the same repository.

When I run composer install, the sub-package is intalled and shows in the vendor folder, but I still get a PHP exception 'Class not found' until I run composer dumpautoload

The following questions don't touch on my issue:

Composer package class not found

Composer won't install private package dependencies

Laravel : Code worked after composer dumpautoload

Google has been unable to help me on this one

Project composer.json

{
    ...
    "repositories": [
        {
            "type": "composer",
            "url": "https://PRIVATE-REPOSITORY"
        }
    ],
    "require": {
        "php": ">=7.0",
        "PRIVATE-PACKAGE": ">=1.0.0"
    }
    ...
}

Private package composer.json

{
    ...
    "require": {
        "php": ">=7.0.0",
        "PRIVATE-SUB-PACKAGE": ">=1.0.0"
    },
    "autoload": {
        "psr-4": {
            "PACKAGE\\NAMESPACE\\": "src/"
        }
    }
    ...
}

Private sub-package composer.json

{
    ...
    "autoload": {
        "psr-4": {
            "SUBPAKCAGE\\NAMESPACE": "src/"
        }
    }
    ...
}

I am not having any problems installing the sub-package, as other questions have mentioned, it is the autoloading that seems to be the issue.

The PHP error message

Message: Class 'SUBPACKAGE\NAMESPACE' not found

is coming from code inside the first package, where the sub-package is used.

I know the PHP syntax is correct because I am able to fix the error with

composer dumpautoload -o

but why is it necessary?

I expect composer install or composer update should be sufficient; I have no problem with sub-dependencies from external packages.

Am I missing anything here?



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire