本文整理汇总了PHP中Composer\Repository\RepositoryInterface::filterPackages方法的典型用法代码示例。如果您正苦于以下问题:PHP RepositoryInterface::filterPackages方法的具体用法?PHP RepositoryInterface::filterPackages怎么用?PHP RepositoryInterface::filterPackages使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Composer\Repository\RepositoryInterface
的用法示例。
在下文中一共展示了RepositoryInterface::filterPackages方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: getPackage
/**
* finds a package by name and version if provided
*
* @param RepositoryInterface $installedRepo
* @param RepositoryInterface $repos
* @param string $name
* @param string $version
* @return array array(CompletePackageInterface, array of versions)
* @throws \InvalidArgumentException
*/
protected function getPackage(RepositoryInterface $installedRepo, RepositoryInterface $repos, $name, $version = null)
{
$name = strtolower($name);
if ($version) {
$parser = new VersionParser();
$version = $parser->normalize($version);
}
$match = null;
$matches = array();
$repos->filterPackages(function ($package) use($name, $version, &$matches) {
if ($package->getName() === $name) {
$matches[] = $package;
}
}, 'Composer\\Package\\CompletePackage');
if (null === $version) {
// search for a locally installed version
foreach ($matches as $package) {
if ($installedRepo->hasPackage($package)) {
$match = $package;
break;
}
}
if (!$match) {
// fallback to the highest version
foreach ($matches as $package) {
if (null === $match || version_compare($package->getVersion(), $match->getVersion(), '>=')) {
$match = $package;
}
}
}
} else {
// select the specified version
foreach ($matches as $package) {
if ($package->getVersion() === $version) {
$match = $package;
}
}
}
// build versions array
$versions = array();
foreach ($matches as $package) {
$versions[$package->getPrettyVersion()] = $package->getVersion();
}
return array($match, $versions);
}