在安装后脚本中,Composer自动加载失败

时间:2015-10-08 14:34:27

标签: php composer-php package-managers

似乎在运行post-install命令时,composer无法加载psr-4类。

这是我的composer.json:

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

ComposerScript.php包含:

<?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();
    }
}

运行composer install后 输出:

  

生成自动加载文件ComposerScript \ ComposerScript :: postInstall

     

类存在:bool(false)

     

PHP致命错误:类   在第19行的/var/www/project/ComposerScript.php中找不到“Modules \ Common \ Services \ RouterService”

从apache自动加载器运行项目时正常工作。 也在当地工作。 可能是一些服务器配置,但哪一个....

任何帮助或参考赞赏。

1 个答案:

答案 0 :(得分:0)

问题出在 PSR-4 自动加载:

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

文件夹应该是首字母大写,如类名:

asserts

应匹配:

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


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