【问题标题】:How to create a Zend 1.12 project including PHPUnit?如何创建包含 PHPUnit 的 Zend 1.12 项目?
【发布时间】:2015-06-21 04:09:07
【问题描述】:

我仍然无法进入 Zend Framework。

我使用的是这个 Composer 配置:

{
  "name": "MyProjectsName/zf1-test",
  "description": "som description",
  "type": "project",
  "keywords": [
    "framework",
    "zf1"
  ],
   "require": {
     "zendframework/zendframework1": "1.12.11"
   },
   "require-dev": {
     "phpunit/phpunit": "4.1.0",
     "phpunit/dbunit": "1.3.0"
   }
}

这些是我的命令:

sudo mkdir /var/www/projects/MyProjectsName/
# and put that composer file in the folder
# /var/www/projects/MyProjectsName/composer.json
sudo chown www-data:www-data -R /var/www/projects/MyProjectsName/
sudo chmod 775 -R /var/www/projects/MyProjectsName/
cd /var/www/projects/MyProjectsName/
sudo composer update
sudo ./vendor/zendframework/zendframework1/bin/zf.sh create project .
cd /var/www/projects/

但这行不通。它抛出一个错误:

Fatal error: Class 'PHPUnit_Framework_TestCase' not found in /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Test/PHPUnit/ControllerTestCase.php on line 48

这是完整的堆栈跟踪:

n00n@lubuntu-dev:/var/www/projects/MyProjectsName$ sudo composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing zendframework/zendframework1 (1.12.11)
    Loading from cache

  - Installing symfony/yaml (v2.6.6)
    Loading from cache

  - Installing sebastian/version (1.0.5)
    Loading from cache

  - Installing sebastian/recursion-context (1.0.0)
    Loading from cache

  - Installing sebastian/exporter (1.2.0)
    Loading from cache

  - Installing sebastian/environment (1.2.2)
    Loading from cache

  - Installing sebastian/diff (1.3.0)
    Loading from cache

  - Installing sebastian/comparator (1.1.1)
    Loading from cache

  - Installing doctrine/instantiator (1.0.4)
    Loading from cache

  - Installing phpunit/php-text-template (1.2.0)
    Loading from cache

  - Installing phpunit/phpunit-mock-objects (2.3.1)
    Loading from cache

  - Installing phpunit/php-timer (1.0.5)
    Loading from cache

  - Installing phpunit/php-file-iterator (1.3.4)
    Loading from cache

  - Installing phpunit/php-token-stream (1.4.1)
    Loading from cache

  - Installing phpunit/php-code-coverage (2.0.16)
    Loading from cache

  - Installing phpunit/phpunit (4.1.0)
    Loading from cache

  - Installing phpunit/dbunit (1.3.0)
    Loading from cache

phpunit/phpunit suggests installing phpunit/php-invoker (~1.1)
Writing lock file
Generating autoload files
n00n@lubuntu-dev:/var/www/projects/MyProjectsName$ 

一切正常...但是现在,创建 zend 项目的下一个命令失败了....

n00n@lubuntu-dev:/var/www/projects/MyProjectsName$ sudo ./vendor/zendframework/zendframework1/bin/zf.sh create project .
Creating project at /var/www/projects/MyProjectsName
Note: This command created a web project, for more information setting up your VHOST, please see docs/README
PHP Fatal error:  Class 'PHPUnit_Framework_TestCase' not found in /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Test/PHPUnit/ControllerTestCase.php on line 48
PHP Stack trace:
PHP   1. {main}() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/bin/zf.php:0
PHP   2. ZF::main() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/bin/zf.php:623
PHP   3. ZF->run() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/bin/zf.php:74
PHP   4. ZF->_runTool() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/bin/zf.php:117
PHP   5. Zend_Tool_Framework_Client_Abstract->dispatch() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/bin/zf.php:600
PHP   6. Zend_Tool_Framework_Client_Abstract->_handleDispatch() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Framework/Client/Abstract.php:241
PHP   7. Zend_Tool_Framework_Client_Abstract->_handleDispatchExecution() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Framework/Client/Abstract.php:318
PHP   8. call_user_func_array:{/var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Framework/Client/Abstract.php:324}() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Framework/Client/Abstract.php:324
PHP   9. Zend_Tool_Project_Provider_Project->create() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Framework/Client/Abstract.php:324
PHP  10. Zend_Tool_Project_Profile_Resource->create() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Project/Provider/Project.php:107
PHP  11. Zend_Tool_Project_Profile_Resource->__call() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Project/Provider/Project.php:107
PHP  12. call_user_func_array:{/var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Project/Profile/Resource.php:256}() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Project/Profile/Resource.php:256
PHP  13. Zend_Tool_Project_Context_Zf_TestApplicationActionMethod->create() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Project/Profile/Resource.php:256
PHP  14. Zend_CodeGenerator_Php_File::fromReflectedFileName() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Project/Context/Zf/TestApplicationActionMethod.php:176
PHP  15. include() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/CodeGenerator/Php/File.php:124
PHP  16. spl_autoload_call() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/CodeGenerator/Php/File.php:4
PHP  17. Zend_Loader_Autoloader::autoload() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/CodeGenerator/Php/File.php:0
PHP  18. call_user_func:{/var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Loader/Autoloader.php:124}() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Loader/Autoloader.php:124
PHP  19. Zend_Loader_Autoloader->_autoload() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Loader/Autoloader.php:124
PHP  20. call_user_func:{/var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Loader/Autoloader.php:479}() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Loader/Autoloader.php:479
PHP  21. Zend_Loader::loadClass() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Loader/Autoloader.php:479
PHP  22. Zend_Loader::loadFile() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Loader.php:82
PHP  23. include_once() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Loader.php:134

Fatal error: Class 'PHPUnit_Framework_TestCase' not found in /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Test/PHPUnit/ControllerTestCase.php on line 48

Call Stack:
    0.0014     308896   1. {main}() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/bin/zf.php:0
    0.0016     308944   2. ZF::main() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/bin/zf.php:623
    0.0065     559080   3. ZF->run() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/bin/zf.php:74
    0.0065     559216   4. ZF->_runTool() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/bin/zf.php:117
    0.0082     629864   5. Zend_Tool_Framework_Client_Abstract->dispatch() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/bin/zf.php:600
    0.1806    4532200   6. Zend_Tool_Framework_Client_Abstract->_handleDispatch() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Framework/Client/Abstract.php:241
    0.1807    4532952   7. Zend_Tool_Framework_Client_Abstract->_handleDispatchExecution() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Framework/Client/Abstract.php:318
    0.1808    4533392   8. call_user_func_array:{/var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Framework/Client/Abstract.php:324}() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Framework/Client/Abstract.php:324
    0.1808    4534304   9. Zend_Tool_Project_Provider_Project->create() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Framework/Client/Abstract.php:324
    0.2263    4724520  10. Zend_Tool_Project_Profile_Resource->create() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Project/Provider/Project.php:107
    0.2263    4724704  11. Zend_Tool_Project_Profile_Resource->__call() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Project/Provider/Project.php:107
    0.2263    4725144  12. call_user_func_array:{/var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Project/Profile/Resource.php:256}() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Project/Profile/Resource.php:256
    0.2263    4725632  13. Zend_Tool_Project_Context_Zf_TestApplicationActionMethod->create() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Project/Profile/Resource.php:256
    0.2265    4725904  14. Zend_CodeGenerator_Php_File::fromReflectedFileName() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Tool/Project/Context/Zf/TestApplicationActionMethod.php:176
    0.2269    4730368  15. include('/var/www/projects/MyProjectsName/tests/application/controllers/IndexControllerTest.php') /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/CodeGenerator/Php/File.php:124
    0.2269    4730640  16. spl_autoload_call() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/CodeGenerator/Php/File.php:4
    0.2269    4730696  17. Zend_Loader_Autoloader::autoload() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/CodeGenerator/Php/File.php:0
    0.2270    4731048  18. call_user_func:{/var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Loader/Autoloader.php:124}() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Loader/Autoloader.php:124
    0.2270    4731080  19. Zend_Loader_Autoloader->_autoload() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Loader/Autoloader.php:124
    0.2270    4731128  20. call_user_func:{/var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Loader/Autoloader.php:479}() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Loader/Autoloader.php:479
    0.2270    4731160  21. Zend_Loader::loadClass() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Loader/Autoloader.php:479
    0.2271    4731416  22. Zend_Loader::loadFile() /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Loader.php:82
    0.2306    4959256  23. include_once('/var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Test/PHPUnit/ControllerTestCase.php') /var/www/projects/MyProjectsName/vendor/zendframework/zendframework1/library/Zend/Loader.php:134

我该如何解决这个问题?当然,我可以尝试手动修复依赖关系。但我更喜欢 Composer 和 Zend 使用的方法。

【问题讨论】:

  • 一个非常老的框架,一个非常老的 PHPUnit 版本,我必须说。至少你应该允许 Composer 的兼容更新。阅读getcomposer.org/doc/01-basic-usage.md 并选择波浪号或插入符号运算符来定义版本范围而不是一个确切的版本。

标签: php zend-framework frameworks dependencies composer-php


【解决方案1】:

我可以在它之后发出某种更新命令吗?原因似乎是命令“zf.sh create project”。已中止。还是出现任何错误?

无论如何,...我的日食仍然不知道这一点: 类 IndexController 扩展 Zend_Controller_Action .. Eclipse 不知道 Zend_Controller_Action 是什么。 与测试文件夹相同... 类 IndexControllerTest 扩展 Zend_Test_PHPUnit_ControllerTestCase Eclipse 无法解析 Zend_Test_PHPUnit_ControllerTestCase

【讨论】:

    【解决方案2】:

    ZF1 和 Composer 不能开箱即用。

    ZF1 不会知道您通过 Composer 安装的其他类/文件。

    Composer 自动加载和 ZF1

    您始终需要将 Composer Autoloader 添加到 ZF1。

    “bin 脚本”一次,网络“public/index.php”一次。

    • 脚本

      请在zendframework1/bin/zf.php 文件的顶部添加以下行:

      require '../vendor/autoload.php';

      这会设置 Composer 自动加载器,以便 PHPUnit 类会自动加载。

      斯文评论:

      这不会永远如此。下次安装更新的 ZF1 版本时,修补生成的 bin/zf.php 文件将被覆盖 - 而且它在新安装项目的另一台机器上完全不能开箱即用。

      使用 composer.json 的脚本部分。您可以在那里添加一个 PHP 脚本,该脚本会在您每次更新依赖项时自动修改 zf.php 文件(通过插入 require 语句)。

    • 网络

      您还需要将上面的行添加到public/index.php

    PHPUnit 版本

    请注意,您可能需要将 phpUnit 版本降低到“3.4”。

    Citing Adam Lundrigan:

    PHPUnit for Zend Framework v1 支持的分支是 v3.4.x。 没有计划将 ZFv1 更新到任何较新版本的 PHPUnit。

    对于 oldtimer,您需要 oldtimer 零件 :) 至少“Zend_Test_PHPUnit_ControllerTestCase”需要一些调整以使其与 phpUnit v4 完全兼容。另见:https://stackoverflow.com/a/27092238/1163786


    反正……我的eclipse还是不知道:……类名……

    您可以将供应商文件夹添加到项目的包含路径中,以便扫描文件中的类名并且“Intellisense”开始工作。

    【讨论】:

    • 这不会永远如此。下次安装更新的 ZF1 版本时,修补生成的 bin/zf.php 文件将被覆盖 - 在新安装项目的另一台机器上,它完全不能开箱即用。
    • 哪个 ZF 版本可以与 composer 一起正常工作?
    猜你喜欢
    • 2014-08-10
    • 2016-02-06
    • 1970-01-01
    • 2019-01-11
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 2018-10-21
    相关资源
    最近更新 更多