zend framework - tutorial - Zend_Controller_Router_Exception: ruta predeterminada no está definida
zend framework tutorial (2)
Esto suena como un problema típico de que no ha configurado su aplicación correctamente en el arranque y luego invocando una solicitud que conduce a una ruta indefinida. En su caso, la ruta se especifica como Route default
.
La ruta puede ser correcta pero no definida.
Para fines de depuración, imprima el $url
que invoca para que vea lo que está sucediendo.
Estoy tratando de probar un controlador. Zend Tool ha generado el siguiente código:
class Default_CarrinhoControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{
public function setUp()
{
$this->bootstrap = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . ''/configs/application.ini'');
parent::setUp();
}
public function testIndexAction()
{
$params = array(''action'' => ''index'', ''controller'' => ''Carrinho'', ''module'' => ''default'');
$urlParams = $this->urlizeOptions($params);
$url = $this->url($urlParams);
$this->dispatch($url);
// assertions
$this->assertModule($urlParams[''module'']);
$this->assertController($urlParams[''controller'']);
$this->assertAction($urlParams[''action'']);
$this->assertQueryContentContains(
''div#view-content p'',
''View script for controller <b>'' . $params[''controller''] . ''</b> and script/action name <b>'' . $params[''action''] . ''</b>''
);
}
}
PHPUnit Bootstrap
<?php
// Define path to application directory
defined(''APPLICATION_PATH'')
|| define(''APPLICATION_PATH'', realpath(dirname(__FILE__) . ''/../application''));
// Define application environment
defined(''APPLICATION_ENV'')
|| define(''APPLICATION_ENV'', (getenv(''APPLICATION_ENV'') ? getenv(''APPLICATION_ENV'') : ''testing''));
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . ''/../library''),
get_include_path(),
)));
require_once ''Zend/Loader/Autoloader.php'';
Zend_Loader_Autoloader::getInstance();
// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . ''/configs/application.ini''
);
Pero ha fallado y la ruta es correcta
Default_CarrinhoControllerTest::testIndexAction()
Zend_Controller_Router_Exception: Route default is not defined
C:/xampp/ZendFramework-1.11.11/library/Zend/Controller/Router/Rewrite.php:318
C:/xampp/ZendFramework-1.11.11/library/Zend/Controller/Router/Rewrite.php:469
C:/xampp/ZendFramework-1.11.11/library/Zend/Test/PHPUnit/ControllerTestCase.php:1180
C:/htdocs/farmaciaonline/FarmaciaOnlineWeb/tests/application/modules/default/controllers/CarrinhoControllerTest.php:16
C:/xampp/php/PEAR/PHPUnit/Framework/TestCase.php:939
C:/xampp/php/PEAR/PHPUnit/Framework/TestCase.php:801
C:/xampp/php/PEAR/PHPUnit/Framework/TestResult.php:649
C:/xampp/php/PEAR/PHPUnit/Framework/TestCase.php:748
C:/xampp/php/PEAR/PHPUnit/Framework/TestSuite.php:772
C:/xampp/php/PEAR/PHPUnit/Framework/TestSuite.php:745
C:/xampp/php/PEAR/PHPUnit/Framework/TestSuite.php:705
C:/xampp/php/PEAR/PHPUnit/TextUI/TestRunner.php:325
C:/xampp/php/PEAR/PHPUnit/TextUI/Command.php:187
C:/xampp/php/PEAR/PHPUnit/TextUI/Command.php:125
C:/xampp/php/phpunit:44
Tengo el bootstrap generado por phpunit predeterminado por la herramienta zend, configuré algunas rutas personalizadas pero las rutas predeterminadas todavía están funcionando en la aplicación. ¿Qué podría estar mal?
Parece que hay un problema con el caso de prueba del controlador que no establece la ruta predeterminada, si se han establecido rutas personalizadas (este es un comportamiento diferente al del marco).
El parche del problema:
/**
* URL Helper
*
* @param array $urlOptions
* @param string $name
* @param bool $reset
* @param bool $encode
*/
public function url($urlOptions = array(), $name = null, $reset = false, $encode = true, $default = false)
{
$frontController = $this->getFrontController();
$router = $frontController->getRouter();
if (!$router instanceof Zend_Controller_Router_Rewrite) {
throw new Exception(''This url helper utility function only works when the router is of type Zend_Controller_Router_Rewrite'');
}
if ($default) {
$router->addDefaultRoutes();
}
return $router->assemble($urlOptions, $name, $reset, $encode);
}
Tendrá que pasar true
como el último argumento cuando use la función url()
.
En lugar de parchear el caso de prueba, puede agregar las rutas predeterminadas en algún lugar en el proceso de arranque:
$frontController->getRouter()->addDefaultRoutes();