Pregunta

Actualización 23 de diciembre

Tuve el problema en el que Zend Framework se queja de "No hay módulo predeterminado definido para esta aplicación". No usé módulos y la aplicación principal funciona bien.

Finalmente resolví el problema con la ayuda de weierophinney.net

Su bootstrap necesita configurar mínimamente el directorio del controlador; haga una llamada a $this->frontController->addControllerDirectory(...) en tus appBootstrap() método. No lo hice en mi ejemplo, ya que mi complemento de inicialización hace ese tipo de cosas por mí.

El problema se resuelve agregando el siguiente a setUp()

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

Pero ahora, tengo otras preguntas:

1. ¿Por qué no se inicializa ese valor? application.ini?

En application.ini, Tengo

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

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

2. Intenté configurar el controllerDirectory en bootstrap.php de mi prueba unitaria, pero no funciona

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

La única forma en que funciona es usar setUp(). ¿Porqué es eso?

Actualización final 23 de diciembre


Recibo el error anterior al probar los complementos de mis controladores. No estoy usando ningún módulo. En mi bootstrap.php para pruebas unitarias, incluso intenté agregar

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

Pero todavía no funciona. De todos modos mi bootstrap.php se ve como este

ACTUALIZAR: El error se parece a algo así

Hubo 2 errores:

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

ACTUALIZAR

Intenté agregar

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

Entonces 1 parte funciona.

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');
}
¿Fue útil?

Solución

La solución que parece es tener esto es setUp().

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

Aunque todavía estoy buscando respuestas a mis preguntas publicadas en la actualización

1. ¿Por qué ese valor no es inicializado por Application.ini?

En application.ini, Tengo

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

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

2. Intenté configurar el controllerDirectory en bootstrap.php de mi prueba unitaria, pero no funciona

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

. '/controladores');

La única forma en que funciona es usar setUp(). ¿Porqué es eso?

Otros consejos

Tuve el mismo error, pero esto no resolvió el error en absoluto. Ni en el método Setup () ni en un complemento. Pero configurar el recurso de arranque lo resolvió aunque es normal establecido por mi aplicación. En mi caso, lo siguiente funcionó:

if($this->getFrontController()->getParam('bootstrap') === null) {
    $this->getFrontController()->setParam('bootstrap', $app->getBootstrap());
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top