如何从Composer事件中获取包名?

时间:2017-10-31 23:59:10

标签: composer-php

问题

我正在尝试使用Composer设置更新后脚本,以检查要更新的包。但是,我无法确定如何始终从Composer\Installer\PackageEvent获取包名称。

尝试解决

源代码表示$packageEvent->getOperation->getReason() should return a string,但在我的测试中实际上是返回Composer\DependencyResolver\GenericRule的实例。

有时调用Composer\DependencyResolver\Rule::getReasonData() 会返回一个字符串(包名称),有时会返回Composer\Package\Link

以下代码主要用于确定软件包的名称:

$reasonData = $packageEvent->getOperation()->getReason()->getReasonData();
$packageName = is_string($reasonData) ? $reasonData : $reasonData->getTarget();

除了有时 $packageEvent->getOperation()->getReason()返回null。

问题

如何始终从Composer PackageEvent获取包名?

奖励积分

如何获取正在安装/更新/等的软件包的名称。来自all of the Composer event classes

1 个答案:

答案 0 :(得分:1)

我的错! Composer操作仍然可以通过不同的方法访问包,这取决于操作是InstallOperation还是UpdateOperation。以下作品:

/**
 * Returns the package name associated with $event
 *
 * @param PackageEvent $event Package event
 * @return string
 */
public static function getPackageName(PackageEvent $event)
{
    /** @var InstallOperation|UpdateOperation $operation */
    $operation = $event->getOperation();

    $package = method_exists($operation, 'getPackage')
        ? $operation->getPackage()
        : $operation->getInitialPackage();

    return $package->getName();
}