2014-06-19 58 views
3

讓我開始說我已經發布到多個論壇,甚至試圖獲得ZF IRC頻道的幫助。我一直在谷歌搜索連續一週,仍然沒有結果。我以前在這個網站上看過很多Q和A,所以我想我會寫一個賬戶,然後試着問你。如何用Zend Framework和PHPUnit成功創建項目?

(是的,我之前搜索過的常見問題,但沒有答案的幫助了我。)

我想學習如何使用Zend框架的,我已經加入了一個新的項目。出於兼容性的原因,他們使用的是Zend 1(而不是更新的Zend 2)。我發現並遵循了一些在線和實體書籍教程,但我一遍又一遍地得到了相同的結果。

所以在這裏(這是所有教程給出的說明)。我去了framework.zend.com並下載完整版本的ZF 1.12。

  1. 我解壓的內容
  2. 我感動的庫文件夾到一個安全的目錄,它不會被修改
  3. 我感動的bin文件夾中的內容相同的目錄中我的PHP可執行
  4. 我改變了我的php.ini文件中的include_path以包含庫目錄
  5. 我更新了我的Windows PATH變量以確保它包含PHP可執行文件的路徑
  6. 我跑

    zf --help

  7. 該命令按預期工作。我也成功地運行了zf show version(Zend Framework Version 1.12.7)。

  8. 我跑的命令

    ZF創建項目的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文件中的文件或目錄。我甚至在搜索字符串「class PHPUnit_Framework_TestCase」的所有文件和文件夾上運行grep,但沒有打印結果。

一些人建議我沒有安裝PHPUnit(這對我來說很明顯)。錯誤的部分是絕對沒有我讀過的教程中提到了有關安裝PHPUnit之前的任何事情,或者如何安裝它或Zend對它的依賴關係。其中許多是初學者教程,假設您只具備PHP的基本知識,而且我甚至都沒有提到PHPUnit,這是非常令人震驚的。如果PHPUnit非常重要,我會認爲從Zend下載的文件會包含它。我猜不會。

所以我又去了網上,得到了PHPUnit的PHAR文件,但是現在呢?我試圖把它放在多個不同的目錄中,但我仍然得到相同的錯誤。我不應該使用PHAR文件嗎?我應該使用實際的文件嗎?

如何讓ZF識別PHPUnit,解決這個錯誤並創建我的第一個ZF項目?

附加信息: Windows 7的XAMPP服務器(在本地主機上運行),PHP 5.5.6

回答

1

我建議使用Composer來加載兩個ZF和PHPUnit的。然後確保在您的phpunit boostrap文件中包含Composer autoload.php文件。

0

當我將筆記本電腦設置爲第二臺開發機器並下載最新版本的Zend Framework 1(1.12.9)時,我遇到了同樣的問題。每當我嘗試在控制器中創建一個新動作時,我都會遇到同樣的錯誤。但在我的主電腦上,它運行良好。

我意識到這是因爲ZF1的版本,我在我的PHP包括路徑實際上是1.11.11。所以我去了,從ZF archives page得到1.11.14,放到includes目錄下,它工作正常。

不完全確定這是否是使其工作的最佳方式,因爲它是舊版本,但至少它確實有效。直到有人真正來到這裏並提供更好的解決方案,這就是我想要堅持的。

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版本,你應該能夠使用composer在本地添加正確的版本到你的項目中,如here所述。

更新2015年1月: 降級的PHPUnit的XAMPP不再需要爲ZF1已經支持至少從1.12.7 4.1 PHPUnit的版本(我不高於4.1測試)。這是有用的,因爲截至2014年12月,PHPUnit有completely removed已棄用的Pear存儲庫,這意味着您無法再下載3.7以上的版本! (目前XAMPP附帶PHPUnit 3.6)。儘管在Vagrant配置期間,可能需要將XAMPP用於Vagrant並通過Composer全局安裝PHPUnit 4.1。

0

您可以創建或(在Windows ~/.zf.iniC:\Users\YOUR_ACCOUNT\.zf.ini)在你的home目錄編輯.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" 
相關問題