似乎在运行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自动加载器运行项目时正常工作。 也在当地工作。 可能是一些服务器配置,但哪一个....
任何帮助或参考赞赏。
答案 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();