3

更新 12 月 23 日

我遇到了 Zend Framework 抱怨“没有为此应用程序定义默认模块”的问题。我没有使用模块,主应用程序运行良好。

我终于在weierophinney.net的帮助下解决了这个问题

您的引导程序需要最低限度地设置控制器目录——$this->frontController->addControllerDirectory(...)在您的appBootstrap()方法中调用。在我的示例中我没有,因为我的初始化插件为我做了那种事情。

通过将以下内容添加到该问题已解决setUp()

$this->getFrontController()->setControllerDirectory(APPLICATION_PATH . '/controllers');

但是现在,我还有其他一些问题:

1. 为什么那个值没有被初始化application.ini

application.ini,我有

[production]
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

[testing : production]
// didn't change anything regarding modules nor controllers

2.我尝试设置我controllerDirectorybootstrap.php单元测试,但它不起作用

$front = Zend_Controller_Front::getInstance();
$front->setControllerDirectory(APPLICATION_PATH . '/controllers');

唯一可行的方法是使用setUp(). 这是为什么?

12 月 23 日结束更新


单元测试我的控制器插件时出现上述错误。我没有使用任何模块。在我用于单元测试的 bootstrap.php 中,我什至尝试添加

$front = Zend_Controller_Front::getInstance();
$front->setDefaultModule('default');

但它仍然不起作用。反正我的 bootstrap.php 看起来像这样

更新:错误看起来像

有2个错误:

1) Application_Controller_Plugin_AclTest::testAccessToUnauthorizedPageRedirectsToLogin
Zend_Controller_Exception: No default module defined for this application

D:\ResourceLibrary\Frameworks\PHPFrameworks\Zend\Controller\Dispatcher\Standard.php:391
D:\ResourceLibrary\Frameworks\PHPFrameworks\Zend\Controller\Dispatcher\Standard.php:204
D:\ResourceLibrary\Frameworks\PHPFrameworks\Zend\Controller\Dispatcher\Standard.php:244
D:\ResourceLibrary\Frameworks\PHPFrameworks\Zend\Controller\Front.php:954
D:\ResourceLibrary\Frameworks\PHPFrameworks\Zend\Test\PHPUnit\ControllerTestCase.php:205
D:\Projects\Tickle\tests\application\controllers\plugins\aclTest.php:6

2) Application_Controller_Plugin_AclTest::testAccessToAllowedPageWorks
Zend_Controller_Exception: No default module defined for this application

D:\ResourceLibrary\Frameworks\PHPFrameworks\Zend\Controller\Dispatcher\Standard.php:391
D:\ResourceLibrary\Frameworks\PHPFrameworks\Zend\Controller\Dispatcher\Standard.php:204
D:\ResourceLibrary\Frameworks\PHPFrameworks\Zend\Controller\Dispatcher\Standard.php:244
D:\ResourceLibrary\Frameworks\PHPFrameworks\Zend\Controller\Front.php:954
D:\ResourceLibrary\Frameworks\PHPFrameworks\Zend\Test\PHPUnit\ControllerTestCase.php:205
D:\Projects\Tickle\tests\application\controllers\plugins\aclTest.php:16

更新

我尝试添加

public function setUp() {
  $front = Zend_Controller_Front::getInstance();
  $front->setDefaultModule('default');
}

然后 1 部分有效。

public function testAccessToUnauthorizedPageRedirectsToLogin() { // this fails with exception "Zend_Controller_Exception: No default module defined for this application"
  $this->dispatch('/projects');
  $this->assertController('auth');
  $this->assertAction('login');
}

public function testAccessToAllowedPageWorks() { // this passes
  $auth = Zend_Auth::getInstance();
  $authAdapter = new Application_Auth_Adapter('jiewmeng', 'password');
  $auth->authenticate($authAdapter);

  $this->dispatch('/projects');
  $this->assertController('projects');
  $this->assertAction('index');
}
4

2 回答 2

3

解决方案似乎是这样setUp()

$this->getFrontController()->setControllerDirectory(APPLICATION_PATH . '/controllers');

我仍在寻找更新中发布的问题的答案

1. 为什么这个值没有被 application.ini 初始化?

application.ini,我有

[production]
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

[testing : production]
// didn't change anything regarding modules nor controllers

2.我尝试设置我controllerDirectorybootstrap.php单元测试,但它不起作用

$front = Zend_Controller_Front::getInstance();
$front->setControllerDirectory(APPLICATION_PATH

. '/控制器');

唯一可行的方法是使用 setUp(). 这是为什么?

于 2010-12-25T08:11:36.150 回答
1

我有同样的错误,但这根本没有解决错误。在 setUp() 方法和插件中都没有。但是设置引导资源解决了它,尽管它通常是由我的应用程序设置的。在我的情况下,以下工作:

if($this->getFrontController()->getParam('bootstrap') === null) {
    $this->getFrontController()->setParam('bootstrap', $app->getBootstrap());
}
于 2012-02-09T13:12:13.637 回答