Composer 自动加载在 post-install 脚本中失败
Composer auto-load fails inside post-install script
当 运行 post-install 命令时,composer 似乎无法加载 psr-4 class。
这是我的 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
输出:
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
当来自 apache autoloader 的 运行 项目正常工作时。
它也在本地工作。
可能是一些服务器配置,但是哪一个....
感谢任何帮助或参考。
问题是 PSR-4 自动加载:
http://www.php-fig.org/psr/psr-4/
文件夹首字母大写,如 class 名称:
{
"autoload": {
"psr-4": {
"Modules\": "Modules/",
"ComposerScript\": ""
}
}
}
$router = new \Modules\Common\Services\RouterService();
应该匹配:
-Modules
-Common
-Services
-RouterService.php
当 运行 post-install 命令时,composer 似乎无法加载 psr-4 class。
这是我的 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
输出:
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
当来自 apache autoloader 的 运行 项目正常工作时。 它也在本地工作。 可能是一些服务器配置,但是哪一个....
感谢任何帮助或参考。
问题是 PSR-4 自动加载:
http://www.php-fig.org/psr/psr-4/
文件夹首字母大写,如 class 名称:
{
"autoload": {
"psr-4": {
"Modules\": "Modules/",
"ComposerScript\": ""
}
}
}
$router = new \Modules\Common\Services\RouterService();
应该匹配:
-Modules
-Common
-Services
-RouterService.php