3

12月23日更新

Zend Framework が「このアプリケーションにはデフォルト モジュールが定義されていません」と文句を言うという問題がありました。モジュールを使用しませんでしたが、メイン アプリは正常に動作します。

私は最終的にweerophinney.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.単体テストのcontrollerDirectoryinを設定しようとしましたが、機能しませんbootstrap.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.単体テストのcontrollerDirectoryin を設定しようとしましたが、機能しませんbootstrap.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 に答える