Zend_Controller_Router_Exception: маршрут по умолчанию не определен - PullRequest
6 голосов
/ 07 января 2012

Я пытаюсь проверить контроллер. Zend Tool сгенерировал следующий код:

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'
);

Но это не удалось, и маршрут правильный

 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

У меня есть стандартный загрузчик phpunit, созданный программой zend, я настроил несколько пользовательских маршрутов, но маршруты по умолчанию все еще работают в приложении. Что может быть не так?

Ответы [ 2 ]

7 голосов
/ 24 января 2012

Похоже, что проблема с контрольным примером контроллера , не устанавливающим маршрут по умолчанию, если были настроены пользовательские маршруты (это поведение отличается от каркаса).

исправление из проблемы:

/**
 * 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);
}

Вам нужно будет передать true в качестве последнего аргумента при использовании функции url().

Вместо исправления тестового примера вы можетепросто добавьте маршруты по умолчанию где-нибудь в процессе начальной загрузки:

$frontController->getRouter()->addDefaultRoutes();
0 голосов
/ 07 января 2012

Это звучит как типичная проблема: вы не настроили ваше приложение в начальной загрузке должным образом и затем вызываете запрос, который приводит к неопределенному маршруту.В вашем случае маршрут указан как Route default.

Маршрут может быть правильным, но только не определенным.

В целях отладки выведите $url, который вы вызываете, чтобы увидеть, что происходит.

...