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 tuo appBootstrap() 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');
}
È stato utile?

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 in bootstrap.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());
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top