Zend_test: nessun modulo predefinito definito per questa applicazione
-
12-10-2019 - |
Domanda
Aggiornamento 23 dic
Ho avuto il problema in cui Zend Framework si lamenta di "nessun modulo predefinito definito per questa applicazione". Non ho usato i moduli e l'app principale funziona bene.
Alla fine ho risolto il problema con l'aiuto di weierophinney.net
Il tuo bootstrap deve impostare minimamente la directory del controller - fai una chiamata a
$this->frontController->addControllerDirectory(...)
nel tuoappBootstrap()
metodo. Non l'ho fatto nel mio esempio, dato che il mio plug -in di inizializzazione fa questo genere di cose per me.
Il problema viene risolto aggiungendo il seguente setUp()
$this->getFrontController()->setControllerDirectory(APPLICATION_PATH . '/controllers');
Ma ora ho altre domande:
1. Perché quel valore non viene inizializzato da application.ini
?
In application.ini
, Io ho
[production]
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
[testing : production]
// didn't change anything regarding modules nor controllers
2. Ho provato a impostare il controllerDirectory
in bootstrap.php
del mio test unitario, ma non funziona
$front = Zend_Controller_Front::getInstance();
$front->setControllerDirectory(APPLICATION_PATH . '/controllers');
L'unico modo in cui funziona è usare setUp()
. Perché?
Fine aggiornamento 23 dic
Sto ricevendo l'errore sopra quando si testano i plug -in del controller. Non sto usando moduli. Nel mio bootstrap.php per il test unitario, ho anche provato ad aggiungere
$front = Zend_Controller_Front::getInstance();
$front->setDefaultModule('default');
Ma ancora non funziona. Comunque il mio bootstrap.php sembra questo
AGGIORNARE: l'errore sembra qualcosa di simile
C'erano 2 errori:
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
AGGIORNARE
Ho provato ad aggiungere
public function setUp() {
$front = Zend_Controller_Front::getInstance();
$front->setDefaultModule('default');
}
Quindi 1 parte funziona.
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');
}
Soluzione
La soluzione che sembra avere questo è setUp()
.
$this->getFrontController()->setControllerDirectory(APPLICATION_PATH . '/controllers');
Anche se sto ancora cercando risposte alle mie domande pubblicate nell'aggiornamento
1. Perché quel valore non viene inizializzato per applicazione.ini?
In
application.ini
, Io ho[production] resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" [testing : production] // didn't change anything regarding modules nor controllers
2. Ho provato a impostare il
controllerDirectory
inbootstrap.php
del mio test unitario, ma non funziona$front = Zend_Controller_Front::getInstance(); $front->setControllerDirectory(APPLICATION_PATH
. '/controller');
L'unico modo in cui funziona è usare
setUp()
. Perché?
Altri suggerimenti
Ho avuto lo stesso errore, ma questo non ha risolto affatto l'errore. Né nel metodo setup () né in un plug -in. Ma l'impostazione della risorsa Bootstrap la ha risolto sebbene sia normalmente impostata dalla mia applicazione. Nel mio caso i seguenti hanno funzionato:
if($this->getFrontController()->getParam('bootstrap') === null) {
$this->getFrontController()->setParam('bootstrap', $app->getBootstrap());
}