Php 为什么composer降级了我的软件包?

Php 为什么composer降级了我的软件包?,php,composer-php,Php,Composer Php,php composer.phar update做到了这一点(删除了2.3.0包并安装了整个2.2.5 Zend Framework): 为什么会这样?My composer.json看起来是这样的,并没有提出任何指导上述事件进程的建议: "repositories":[ { "type":"composer", "url":"https://packagist.org/" }, { "type":"composer",

php composer.phar update
做到了这一点(删除了2.3.0包并安装了整个2.2.5 Zend Framework):

为什么会这样?My composer.json看起来是这样的,并没有提出任何指导上述事件进程的建议:

"repositories":[
    {
        "type":"composer",
        "url":"https://packagist.org/"
    },
    {
         "type":"composer",
         "url":"http://packages.zendframework.com/"
    }
],
"require": {
    "zendframework/zend-log" : "2.*",
    "zendframework/zend-escaper" : "2.*",
    "zendframework/zend-filter" : "2.*",
    "zendframework/zend-view" : "2.*"
}

我的期望是:删除2.3.0,安装2.3.1软件包

我的答案没有完全描述为什么它会被降级,因为Composer中的算法非常密集(这就是为什么
更新
安装
使用
花费的时间要长的原因)。它们会检查您的所有依赖项、所有可能的版本,以及每个依赖项的版本依赖项是什么。在获得所有这些信息后,它试图找到一个“完美”的匹配

有时,依赖项或依赖项的依赖项中最细微的变化都会导致剧烈的变化。此外,您有时会发现无法解析依赖项,因为一个依赖项可能需要
symfony/http foundation~2.5
,而另一个依赖项可能需要
symfony/http foundation 2.1.*
(在您的案例中,情况并非如此,但很高兴知道这一点)

总之,这个故事的寓意是,你应该尽可能具体地使用你的
composer.json
(尤其是在制作中)。这样,您就可以随时控制您使用的版本,而不是由作曲家来决定。更糟糕的情况是,您运行了一个
composer更新
,它无法解析您的依赖关系。然后做一些研究,看看哪些版本会很高兴地一起解决


我建议使用
~2.3
(与
=2.3
<3
相同)或
2.3.
。然后,Composer甚至不会尝试版本
2.2.5
。查看如何表达不同的软件包版本。

在运行
update
之前,依赖项中是否有任何更改(添加/删除)

;这个故事的寓意是尽可能具体地说明你的版本号。因此,请使用
~2.3
(即
=2.3
,而
是您的完整
composer.json
?您是否需要将zend设置为低于您定义的值的其他内容?它几乎是整个composer.json(减去名称、说明和许可证).我不认为房间里有任何东西被移动/改变JSON@Sam耶!将其更改为
~2.3
有效!请随意使用您的评论作为答案
"repositories":[
    {
        "type":"composer",
        "url":"https://packagist.org/"
    },
    {
         "type":"composer",
         "url":"http://packages.zendframework.com/"
    }
],
"require": {
    "zendframework/zend-log" : "2.*",
    "zendframework/zend-escaper" : "2.*",
    "zendframework/zend-filter" : "2.*",
    "zendframework/zend-view" : "2.*"
}