Question

Mise à jour du 23 décembre

J'ai eu le problème où Zend Framework se plaint de "Aucun module par défaut défini pour cette application". Je n'ai pas utilisé de modules et l'application principale fonctionne bien.

J'ai finalement résolu le problème avec l'aide de weierrophinney.net

Votre bootstrap doit définir le répertoire du contrôleur au minimum - effectuez un appel à $this->frontController->addControllerDirectory(...) dans ton appBootstrap() méthode. Je ne l'ai pas fait dans mon exemple, car mon plugin d'initialisation fait ce genre de chose pour moi.

Le problème est résolu en ajoutant ce qui précède setUp()

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

Mais maintenant, j'ai d'autres questions:

1. Pourquoi cette valeur ne est-elle pas initialisée par application.ini?

Dans application.ini, J'ai

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

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

2. J'ai essayé de définir le controllerDirectory dans bootstrap.php de mon test unitaire, mais cela ne fonctionne pas

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

La seule façon qui fonctionne est d'utiliser setUp(). Pourquoi donc?

Mettre fin à la mise à jour 23 décembre


J'obtiens l'erreur ci-dessus lorsque l'unité teste mes plugins de contrôleur. Je n'utilise aucun module. Dans mon bootstrap.php pour les tests unitaires, j'ai même essayé d'ajouter

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

Mais cela ne fonctionne toujours pas. Quoi qu'il en soit, mon bootstrap.php ressemble cette

METTRE À JOUR: l'erreur ressemble à quelque chose comme

Il y avait 2 erreurs:

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

METTRE À JOUR

J'ai essayé d'ajouter

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

Puis 1 partie fonctionne.

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');
}
Était-ce utile?

La solution

La solution il semble que ce soit setUp().

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

Tho je cherche toujours des réponses à mes questions publiées dans la mise à jour

1. Pourquoi cette valeur ne est-elle pas initialisée par application.ini?

Dans application.ini, J'ai

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

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

2. J'ai essayé de définir le controllerDirectory dans bootstrap.php de mon test unitaire, mais cela ne fonctionne pas

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

. «/ contrôleurs»);

La seule façon qui fonctionne est d'utiliser setUp(). Pourquoi donc?

Autres conseils

J'ai eu la même erreur, mais cela n'a pas du tout résolu l'erreur. Ni dans la méthode Configuration () ni dans un plugin. Mais la définition de la ressource bootstrap l'a résolu bien qu'elle soit normale définie par mon application. Dans mon cas, ce qui suit a fonctionné:

if($this->getFrontController()->getParam('bootstrap') === null) {
    $this->getFrontController()->setParam('bootstrap', $app->getBootstrap());
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top