首先我要说的是,我已将此发布到多个论坛,甚至试图在ZF IRC频道上获得帮助。谷歌连续一周一直没有结果。我过去在这个网站上看了很多问答和答案,所以我想我会创建一个帐户并试着问你。
(是的,我已经搜索了之前提出的问题,但没有一个答案对我有帮助。)
我正在尝试学习如何将Zend Framework用于我加入的新项目。出于兼容性原因,他们使用的是Zend 1(而不是更新的Zend 2)。我发现并遵循了许多在线和实体书籍教程,但我一遍又一遍地得到相同的结果。
所以这里(这是所有教程给出的指示)。我去了framework.zend.com并下载了完整版的ZF 1.12。
我跑了
zf --help
此命令按预期工作。我还成功运行了zf show version(Zend Framework Version 1.12.7)。
我运行了命令
创建项目myproject
执行此操作时,我收到以下错误消息:
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in D:\Zend\library\Zend\Test\PHPUnit\ControllerTestCase.php on line 48
该问题的特定行是一个扩展PHPUnit_Framework_TestCase的类声明。 我不知道PHPUnit_Framework_TestCase的定义位置。它不在我从Zend下载的单个ZIP文件中的任何文件或目录中。我甚至在所有文件和文件夹上运行grep,搜索字符串" class PHPUnit_Framework_TestCase"但它没有打印结果。
有些人认为我没有安装PHPUnit(这对我来说很明显)。让我感到困惑的部分是我读过的教程绝对 none 提到了有关安装PHPUnit或者如何安装它或Zend对它有什么依赖关系的任何信息。其中许多都是初学者教程,假设你只掌握了PHP的基本知识,而且我甚至都没有提到PHPUnit,这让我很震惊。如果PHPUnit非常重要,我会认为我从Zend下载的文件会包含它。我猜不是。
所以我再次上网并获得了PHPUnit的PHAR文件,但现在又怎样了?我尝试将它放在多个不同的目录中,但我仍然得到相同的错误。我不应该使用PHAR文件吗?我应该使用实际文件吗?
如何让ZF识别PHPUnit,解决此错误并创建我的第一个ZF项目?
其他信息: Windows 7,XAMPP服务器(在localhost上运行),PHP 5.5.6
答案 0 :(得分:4)
假设您已经安装了PHPUnit并且它位于您的包含路径上(请记住,ZF1仅正式支持PHPUnit 3.4.x并且绝对不支持PHPUnit 3.5.x以上的任何内容,因此如果您需要使用XAMPP您可能必须按照here所述降级PHPUnit。问题很可能是由于这个commit,其中对PHPUnit的require调用被剥离而支持使用自动加载器。 CLI上的ZF工具不会设置自动加载器,因此找不到PHPUnit,因为它根本不是require
d!要解决此问题,您可以将这些行返回到Zend/Test/PHPUnit/ControllerTestCase.php
/** @see PHPUnit_Runner_Version */
require_once 'PHPUnit/Runner/Version.php';
/**
* Depending on version, include the proper PHPUnit support
* @see PHPUnit_Autoload
*/
require_once (version_compare(PHPUnit_Runner_Version::id(), '3.5.0', '>=')) ? 'PHPUnit/Autoload.php' : 'PHPUnit/Framework.php';
值得注意的是,即使您提到的错误,ZF工具在设置项目时仍应正常工作,它只是不会产生单元测试操作(您必须制作他们自己)。如果您不想降级您的XAMPP PHPUnit版本,您应该能够使用如here所述的编辑器在本地添加正确的版本。
2015年1月更新: 不再需要为XAMPP降级PHPUnit,因为自1.12.7以来ZF1至少支持PHPUnit 4.1版(我没有在4.1以上测试过)。这很有用,因为截至2014年12月,PHPUnit已经completely removed弃用了Pear存储库,这意味着您无论如何都无法下载早于3.7的版本! (目前XAMPP附带PHPUnit 3.6)。这些天虽然它可能值得为Vagrant放弃XAMPP并在Vagrant配置期间通过Composer全局安装PHPUnit 4.1。
答案 1 :(得分:1)
我建议使用Composer加载ZF和PHPUnit。然后确保将Composer autoload.php文件包含在您的phpunit boostrap文件中。
答案 2 :(得分:0)
当我将笔记本电脑设置为第二台开发机器并下载最新版本的Zend Framework 1(1.12.9)时,我遇到了同样的问题。每当我尝试在控制器中创建一个新动作时,我都会遇到同样的错误。然而在我的主计算机上,它运行良好。
我意识到这是因为我在php中包含的ZF1版本路径实际上是1.11.11。所以我从ZF archives page得到1.11.14,把它放在include目录中,它工作正常。
不完全确定这是否是使它工作的最佳方式,因为它是旧版本,但至少它确实有效。直到某人真正来到这里并提供更好的解决方案,这就是我打算坚持的。
答案 3 :(得分:0)
您可以在主目录中创建或编辑.zf.ini
文件(Windows上为~/.zf.ini
或C:\Users\YOUR_ACCOUNT\.zf.ini
)
php.include_path = "PATH_TO_THE_LIBRARY_FOLDERS_CONTAINING_ZEND_AND_PHPUnit"
basicloader.classes.0 = "PHPUnit_Framework_SelfDescribing"
basicloader.classes.1 = "PHPUnit_Framework_Test"
basicloader.classes.2 = "PHPUnit_Framework_Assert"
basicloader.classes.3 = "PHPUnit_Framework_TestCase"
如果您在Windows上使用Netbeans,它可能看起来像这样(您可以放置几个库文件夹,只需用分号;
分隔它们):
php.include_path = "C:\Users\romain\dev\ZendFramework-1.12.17\library;C:\Program Files\NetBeans 8.1\php\zend;C:\xampp\php\pear"
basicloader.classes.0 = "NetBeansCommandsProvider"
basicloader.classes.1 = "PHPUnit_Framework_SelfDescribing"
basicloader.classes.2 = "PHPUnit_Framework_Test"
basicloader.classes.3 = "PHPUnit_Framework_Assert"
basicloader.classes.4 = "PHPUnit_Framework_TestCase"