Похоже, что composer не может загрузить класс psr-4 при запуске команды post-install.
Вот мой 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: Класс
«Модули \ Common \ Services \ RouterService» не найдены в /var/www/project/ComposerScript.php в строке 19
При запуске проекта из apache автозагрузчик работает корректно.
Также локально это работает.
Возможно какая-то конфигурация сервера, но какая ….
Любая помощь или ссылка приветствуется.
Проблема была с PSR-4 самозарядные:
http://www.php-fig.org/psr/psr-4/
Папки должны быть с заглавными буквами, такими как имя класса:
{
"autoload": {
"psr-4": {
"Modules\\": "Modules/",
"ComposerScript\\": ""}
}
}
$router = new \Modules\Common\Services\RouterService();
Должно совпадать:
-Modules
-Common
-Services
-RouterService.php
Других решений пока нет …