Zend Framework,phpUnit和Doctrine会导致问题

时间:2010-01-02 20:28:17

标签: php zend-framework ubuntu doctrine phpunit

首先是一些基本信息:

  • Ubuntu最新版本
  • Zend Framewrok 1.9.6
  • Doctrine 1.2.1
  • Php单位最新版

我一直在关注thisthis教程,用doctrine和phpUnit设置我的zend环境。

我的环境不是一个简单的项目,因为我之前做过一些开发 配置了doctrine和phpunit。我在models / DbTable /文件夹中创建了一些db类。 问题是该文件夹中的文件通过运行phpunit导致问题。

这是我得到的错误:

    Fatal error: Cannot redeclare class JS_Model_DBTable_Addresses in /var/www/nrka/application/models/DbTable/addresses.php on line 19

Call Stack:
    0.0007      62480   1. {main}() /usr/bin/phpunit:0
    0.1662    4484880   2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:52
    0.1663    4485612   3. PHPUnit_TextUI_Command->run() /usr/share/php/PHPUnit/TextUI/Command.php:147
    0.1663    4485860   4. PHPUnit_TextUI_Command->handleArguments() /usr/share/php/PHPUnit/TextUI/Command.php:156
    0.1678    4491132   5. PHPUnit_Util_Fileloader::load() /usr/share/php/PHPUnit/TextUI/Command.php:786
    0.1682    4504132   6. include_once('/var/www/nrka/tests/application/bootstrap.php') /usr/share/php/PHPUnit/Util/Fileloader.php:117
    0.2773    7249284   7. Doctrine_Cli->run() /var/www/nrka/tests/application/bootstrap.php:33
    0.2773    7249348   8. Doctrine_Cli->_run() /var/www/nrka/library/Doctrine/Cli.php:452
    0.2789    7259336   9. Doctrine_Cli->executeTask() /var/www/nrka/library/Doctrine/Cli.php:498
    0.2790    7259480  10. Doctrine_Task_BuildAllReload->execute() /var/www/nrka/library/Doctrine/Cli.php:516
    0.5301   11487988  11. Doctrine_Task_LoadData->execute() /var/www/nrka/library/Doctrine/Task/BuildAllReload.php:56
    0.5312   11488028  12. Doctrine_Core::loadData() /var/www/nrka/library/Doctrine/Task/LoadData.php:43
    0.5324   11527112  13. Doctrine_Data->importData() /var/www/nrka/library/Doctrine/Core.php:996
    0.5372   11641772  14. Doctrine_Data_Import->doImport() /var/www/nrka/library/Doctrine/Data.php:222
    0.5375   11642232  15. Doctrine_Data->purge() /var/www/nrka/library/Doctrine/Data/Import.php:115
    0.5375   11642300  16. Doctrine_Core::getLoadedModels() /var/www/nrka/library/Doctrine/Data.php:263
    0.5382   11690076  17. Doctrine_Core::filterInvalidModels() /var/www/nrka/library/Doctrine/Core.php:716
    0.5544   11710976  18. Doctrine_Core::isValidModelClass() /var/www/nrka/library/Doctrine/Core.php:763
    0.5544   11711084  19. class_exists() /var/www/nrka/library/Doctrine/Core.php:784
    0.5546   11711456  20. Doctrine_Core::modelsAutoload() /var/www/nrka/library/Doctrine/Core.php:0

我认为发生的事情是zend Framework,Doctrine和PHPunit的自动加载器互相干扰,但我不确定。

顺便说一下。上述文件的第19行(addresses.ph)是该文件的最后一行。我已经检查了其他位置,但是我手边还是包含在其他位置,但据我所知,它不是

这就是我的application.ini的样子:

production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0

phpSettings.date.timezone = "Europe/Amsterdam"

includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.layout.layoutpath = APPLICATION_PATH "/layouts"
resources.view.basePath = /var/www/nrka/public/
autoloaderNamespaces[] = "Doctrine"
autoloaderNamespaces0 = "JS_"

;---------
;databases
;---------
doctrine.dsn = "mysql://root:root@localhost/zcdev"
doctrine.data_fixtures_path = APPLICATION_PATH "/configs/data/fixtures"
doctrine.sql_path           = APPLICATION_PATH "/configs/data/sql"
doctrine.migrations_path    = APPLICATION_PATH "/configs/migrations"
doctrine.yaml_schema_path   = APPLICATION_PATH "/configs/schema.yml"
doctrine.models_path        = APPLICATION_PATH "/models"

resources.db.isDefaultTableAdapter = true
resources.db.adapter =  mysqli
resources.db.params.host    = localhost
resources.db.params.username = root
resources.db.params.password = root
resources.db.params.dbname = ladosa



[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
doctrine.dsn = "mysql://root:root@localhost/zctest"

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

它可能会提供一些额外的信息。

所以我很想知道是否有人为我提供解决方案。

提前致谢!

1 个答案:

答案 0 :(得分:1)

我通过使用passthru暂时解决了这个问题,因此在PHP环境之外运行Doctrine Cli。 可能它远远不是一个好的稳定解决方案,但在得到其他东西之前,我就是这样做的:

<?php
...
$tmpDir = realpath(getcwd());
$newDir = realpath(dirname(__FILE__).'/../../application/scripts/');
chdir($newDir);
passthru('./doctrine build-all-reload -force');
chdir($tmpDir);

解释一下:我存储我所在的路径,然后生成我的学说Cli可执行脚本所在的路径。然后我切换到该目录。 passthru使用-force执行build-all-reload命令,因为“你真的想......”这个问题。 然后我再次转到原始目录。

这为我提供了一个包含所有数据夹具的全新数据库。你可以随时启动这个小代码。 结合Article Database helper for PHPUnit on CodeUtopia中的解决方案,这非常有用。