【问题标题】:Parsing package versions with wildcards for comparison in PHP使用通配符解析包版本以在 PHP 中进行比较
【发布时间】:2021-05-06 08:43:27
【问题描述】:

我正在尝试使用\Composer\Semver\VersionParser 比较包版本,例如^6.1||^6.2||^6.3,但没有得到预期的结果。

我是这样分解版本的

            $currentVersion = '6.3';
            $requiredPackage = '^6.1||^6.2||^6.3';
            $compatibleVersions = explode('||', $requiredPackage);
            $lowestSupported = ltrim(current($compatibleVersions), '^');
            $highestSupported = ltrim(end($compatibleVersions), '^');

            $parser = new VersionParser();
            $lowestSupported = $parser->normalize($lowestSupported);
            $highestSupported = $parser->normalize($highestSupported);

            $isLower = version_compare($currentVersion, $lowestSupported, '<');
            $isHigher = version_compare($currentVersion, $highestSupported, '>');

            if ($isLower || $isHigher) {
                return false;
            }

这适用于$currentVersion 为6.3 的情况,但我认为6.3.4.0 会失败,因为虽然^6.3 匹配包,但由于VersionParser 将版本6.3 标准化为6.3.0.0 ,并且它无法正确解析^6.3 以允许6.3.4.0

有什么想法吗?

【问题讨论】:

  • 可以vierbergenlars/php-semver帮助你吗?
  • 另外,这与 Shopware 有什么关系?
  • 接下来:如果您已经使用composer/semver 的解析器,为什么不也使用他们的比较器?
  • 它与shopware没有直接关系,但我需要使用Shopware中已经存在的库,这就是我标记它的原因。你能指出比较器包,我会检查它是否存在于安装中。没有通用的 PHP 解决方案吗?
  • 这与语义版本控制有什么关系? SemVer standard 需要 Major.Minor.Patch 三元组,不允许四元组。

标签: php composer-php shopware semantic-versioning


【解决方案1】:

我能够使用 Nico Haase 的以下建议来完成它:

$isLower = Comparator::lessThan($currentVersion, $lowestSupported);
$isHigher = Comparator::greaterThan($highestSupported, $currentVersion);

【讨论】:

    猜你喜欢
    • 2013-11-24
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 2019-02-14
    • 2014-11-08
    • 1970-01-01
    相关资源
    最近更新 更多