使用Composer API

时间:2016-06-29 15:26:14

标签: php arrays composer-php

我正在尝试创建一个脚本,它读取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

但我不知道如何使用上述结果并从版本数组中选择正确的索引。 希望我在描述我的问题时很清楚。并提前谢谢

0 个答案:

没有答案