Zend_test: aucun module par défaut défini pour cette application
-
12-10-2019 - |
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 tonappBootstrap()
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');
}
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
dansbootstrap.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());
}