如何在 composer 上使用 Zend Framework 2 的开发分支?

Posted

技术标签:

【中文标题】如何在 composer 上使用 Zend Framework 2 的开发分支?【英文标题】:How to use the develop branch of Zend Framework 2 over composer? 【发布时间】:2015-04-07 13:18:15 【问题描述】:

在 Apigility 驱动的应用程序中,我的 composer.json 看起来像这样:


    "name": "misc - myproject-api",
    "description": "Skeleton Application for Apigility",
    "require": 
        "php": ">=5.3.23",
        "zendframework/zendframework": ">=2.3.2,<3.0.0",
        "zfcampus/zf-apigility": "~1.0",
        "zfcampus/zf-apigility-documentation": "~1.0",
        "zfcampus/zf-development-mode": "~2.0",
        "zfcampus/zf-rest": "~1.0-dev",
        "zf-commons/zfc-base": "dev-master",
        "zendframework/zend-developer-tools": "dev-master",
        "doctrine/doctrine-orm-module": "0.8.*"
    ,
    "require-dev": 
        "zendframework/zftool": "dev-master",
        "zfcampus/zf-apigility-admin": "~1.0",
        "zfcampus/zf-apigility-welcome": "~1.0",
        "zfcampus/zf-deploy": "~1.0",
        "zfr/zfr-cors": "~1.0",
        "zend/zend-studio-development-mode": "~1.0"
    ,
    "keywords": [
        "api",
        "apigility",
        "framework",
        "zf2"
    ],
    "support": 
        "email": "apigility-users@zend.com",
        "irc": "irc://irc.freenode.net/apigility",
        "source": "https://github.com/zfcampus/zf-apigility-skeleton",
        "issues": "https://github.com/zfcampus/zf-apigility-skeleton/issues"
    ,
    "extra": 
        "branch-alias": 
            "dev-master": "1.0-dev",
            "dev-develop": "1.1-dev"
        
    ,
    "config": 
        "process-timeout": 5000
    ,
    "type": "library",
    "license": "BSD-3-Clause",
    "homepage": "http://apigility.org/"

有一个 ZF2 issue(导致以下错误:Fatal error: Cannot use object of type Zend\Db\ResultSet\ResultSet as array)。已经是fixed,但还没有合并到master分支。

因为我现在需要它工作,所以我尝试切换到 develop 分支 -- 更新了我的 composer.json


    "name": "misc - myproject-api",
    "description": "Skeleton Application for Apigility",
    "require": 
        "php": ">=5.3.23",
        "zendframework/zendframework": "dev-develop as dev-master"
        ...
    
    ...

并执行了composer update:

$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Updating zendframework/zendframework (dev-master de98f63 => dev-develop be0b349)
    Checking out be0b3496b73a61a255d05e945b75f6fdf0995c31

Writing lock file
Generating autoload files

问题:我没有观察到任何变化,代码似乎仍然是从 ZF2 master 分支加载的(例如,我的本地 Zend\Paginator\Adapter\DbSelect 恰好具有相应类的状态master 分支)。

如何加载ZF2develop分支?


更新

我已经尝试了 Packagist page of the Zend Framework 中 develop 分支 (2.4.*@dev) 的作曲家 require 方向值。结果与dev-developdev-develop as dev-master 相同——控制台显示正确的分支(或者更好的是正确的提交be0b349)正在下载

$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Removing zendframework/zendframework (2.3.4)
  - Installing zendframework/zendframework (dev-develop be0b349)
    Cloning be0b3496b73a61a255d05e945b75f6fdf0995c31

Writing lock file
Generating autoload files

但更新后,代码还是像master分支中的那样。


更新

$ cd [project root directory]/vendor/zendframework/zendframework
$ git status
# On branch develop
nothing to commit (working directory clean)

也就是说,分支是正确的。而且它也是最新的,自上次提交以来,git log 显示是从 2 月 3 日开始的be0b3496b73a61a255d05e945b75f6fdf0995c31——实际上是current HEAD revision。

所以,分支是正确的,修订是正确的……为什么代码是 uot-of-date?

【问题讨论】:

【参考方案1】:

“develop”分支的别名是 2.4 版。您可能需要“2.4.*@dev”来获取它。

如果这破坏了您的某些依赖项,您可以使用 2.3 版本对其进行别名。

"zendframework/zendframework": "dev-develop as 2.3.4.1"

【讨论】:

感谢您的回答!是的,我试过了,但结果是一样的(见第一个更新)。后来我注意到,分支本身是正确的(参见第二个更新),只有代码是“错误的”。我不明白,为什么会这样,怎么可能。

以上是关于如何在 composer 上使用 Zend Framework 2 的开发分支?的主要内容,如果未能解决你的问题,请参考以下文章

Zend Framework 2 使用 composer 自动加载第三方库

Xampp / Composer / Zend Framework 2 安装问题

Zend Framework 2 安装期间的 Composer CreateProcess 错误代码 0

基于现有项目库对composer.json文件进行逆向工程?

如何配置代码-PHPUnit版本8.5.1对Zend Framework 2.4的覆盖范围?

如何在 PUT 上使用 Zend_Http_Client 设置内容类型?