我正在尝试使用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?
答案 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();
}