首先是一些基本信息:
我一直在关注this和this教程,用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
它可能会提供一些额外的信息。
所以我很想知道是否有人为我提供解决方案。
提前致谢!
答案 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中的解决方案,这非常有用。