简体   繁体   中英

Composer auto-load fails inside post-install script

Seems like composer can't load psr-4 class when running post-install command.

Here is my composer.json:

{
  "autoload": {
      "psr-4": {
        "Modules\\": "modules/",
        "ComposerScript\\": ""
      }
  },
 "scripts": {
    "post-install-cmd": [
      "ComposerScript\\ComposerScript::postInstall"
    ]
  }
}

ComposerScript.php contains:

<?php

namespace ComposerScript;

use Modules\Common\Services\RouterService;
use Composer\Script\Event as ComposerEvent;

class ComposerScript
{

    public static function postInstall(ComposerEvent $event)
    {

        $vendorDir = $event->getComposer()->getConfig()->get('vendor-dir');

        require $vendorDir . '/autoload.php';

        echo 'class exist: ';
        var_dump(class_exists('Modules\Common\Services\RouterService'));

        $router = new \Modules\Common\Services\RouterService();
    }
}

After running composer install Output:

Generating autoload files ComposerScript\\ComposerScript::postInstall

class exist: bool(false)

PHP Fatal error: Class 'Modules\\Common\\Services\\RouterService' not found in /var/www/project/ComposerScript.php on line 19

When running project from apache autoloader works properly. Also locally it works. Probably some server configuration, but which one....

Any help or reference appreciated.

Issue was with PSR-4 autoloading:

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

Folders should be with first letter upper case like class name:

{
  "autoload": {
      "psr-4": {
        "Modules\\": "Modules/",
        "ComposerScript\\": ""
      }
  }
}


$router = new \Modules\Common\Services\RouterService();

Should match:

-Modules
 -Common
  -Services
   -RouterService.php

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM