我正在尝试创建一个脚本,它读取composer.json并循环遍历"中的所有项目"部分并找到依赖。
现在假设composer.json的require部分中的一个条目是
"illuminate/database": "~5.1",
所以,如果我想安装这个软件包,我需要翻译版本号" ~5.1"或者我们可以在composer.json中使用的完全限定版本的任何其他版本格式,不符合以下版本:https://packagist.org/packages/illuminate/database
我相信你们很多人会想到为什么我会尝试重新发明轮子,因为我可以从控制台使用作曲家并安装它。
我正在尝试为我的脚本制作基于Web的程序包安装程序,该程序可以在共享主机上运行,其中exec或proc_open被禁用,
我的目标是将版本号从composer.json翻译成完整版本,然后从我自己的github下载该软件包。
我只需要我可以在我的包的所有版本的数组中搜索的版本号。 要搜索的数组是这样的:
Array
(
[dev-master] => Array
(
[url] => https://packagist.org/versions/31531.json
)
[5.3.x-dev] => Array
(
[url] => https://packagist.org/versions/845026.json
)
[5.2.x-dev] => Array
(
[url] => https://packagist.org/versions/587699.json
)
[5.2.39] => Array
(
[url] => https://packagist.org/versions/867275.json
[requires] => Array
(
[classpreloader/classpreloader] => ~3.0
[doctrine/inflector] => ~1.0
[jeremeamia/superclosure] => ~2.2
[league/flysystem] => ~1.0
)
)
[5.2.38] => Array
(
[url] => https://packagist.org/versions/861234.json
)
[5.2.37] => Array
(
[url] => https://packagist.org/versions/858228.json
)
[5.2.36] => Array
(
[url] => https://packagist.org/versions/852102.json
)
所以我输入版本号" ~5.1"使用上面的数组的函数,它可以查看并返回该数组中的索引,该索引可能类似于" 5.2.39"
我知道在某种程度上可以使用composer API实现,但我无法找到确切的解决方案。最接近解决方案的是:
$version="~5.1";
$parser=new \Composer\Semver\VersionParser();
$ret=$parser->parseConstraints($version);
输出
Composer\Semver\Constraint\MultiConstraint Object
(
[constraints:protected] => Array
(
[0] => Composer\Semver\Constraint\Constraint Object
(
[operator:protected] => 4
[version:protected] => 5.1.0.0-dev
[prettyString:protected] =>
)
[1] => Composer\Semver\Constraint\Constraint Object
(
[operator:protected] => 1
[version:protected] => 5.2.0.0-dev
[prettyString:protected] =>
)
)
[prettyString:protected] => 5.1.*
[conjunctive:protected] => 1
)
但我不知道如何使用上述结果并从版本数组中选择正确的索引。 希望我在描述我的问题时很清楚。并提前谢谢