ZendFramework 2 - почему эта маршрутизация не работает там, где я избегаю использовать метод массива

Есть два способа сделать маршрутизацию

1) module.config.php - это один из способов использования массива (не пытаясь это сделать). 2) есть другой способ руководства (пример: http://evan.pro/zf2-router-talk.html).

Я пытаюсь получить ручной путь, но он терпит неудачу. Где у меня есть Module.php ниже, есть идеи, как сделать эту простую ручную маршрутизацию работающей?

[Thu Oct 25 11:07:50 2012] PHP Fatal error: Class 'Application\Literal' not found in ...

<?php   
namespace Application;    
use Zend\Mvc\ModuleRouteListener;
use Zend\Mvc\MvcEvent;    
// router
use Zend\Mvc\Router\Http;
use Zend\Mvc\Router\SimpleRouteStack;
class Module {

  public function onBootstrap(MvcEvent $e) {
    $router = new Http\TreeRouteStack();
    // Http\Literal::factory(array(
    $route = Literal::factory(array(
        'route' => '/index',
        'defaults' => array(
            'controller' => 'index',
            'action'     => 'index',
        ),
    ));
    $router->addRoute('foo', $route);

    $e->getApplication()->getServiceManager()->get('translator');
    $eventManager = $e->getApplication()->getEventManager();

    // This is for preDispatch 
    $eventManager->attach(\Zend\Mvc\MvcEvent::EVENT_DISPATCH, array($this, 'preDispatch'), 100);

    $moduleRouteListener = new ModuleRouteListener();
    $moduleRouteListener->attach($eventManager);

    echo "0";
  }

  public function preDispatch() {
     echo "1";
  }

  public function getConfig() {
    return include __DIR__ . '/config/module.config.php';
  }

  public function getAutoloaderConfig() {
    return array(
        'Zend\Loader\StandardAutoloader' => array(
            'namespaces' => array(
                __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
            ),
        ),
    );
  }

}

Продолжение: Как я могу заставить работать пользовательское руководство Zend Framework 2, игнорируя файл module.config.php, расположенный в module/Application/config/...

  public function onBootstrap(MvcEvent $e) {    
    $e->getApplication()->getServiceManager()->get('translator');
    $eventManager = $e->getApplication()->getEventManager();

    // This is for preDispatch 
    $eventManager->attach(\Zend\Mvc\MvcEvent::EVENT_DISPATCH, array($this, 'preDispatch'), 100);

    $moduleRouteListener = new ModuleRouteListener();
    $moduleRouteListener->attach($eventManager);

    // this is the router part
    $router = $e->getApplication()->getServiceManager()->get('router'); 

    // this works too
    //$route = new Http\Literal(
    //        '/foo',
    //        array('controller' => 'foo')
    //    );

    // OR

    // this works too
    $route = Http\Literal::factory(array(
      'route' => '/foo',
      'defaults' => array(
        'controller' => 'Application\Controller\IndexController',
        'action' => 'foo'
      ),
    )); 
    $router->addRoute('foo', $route, null);

  }

1 ответ

Решение

Эта ошибка является проблемой пространства имен, вам нужно использовать:

$route = Http\Literal::factory(array(...

Или альтернативно добавьте:

use Zend\Mvc\Router\Http\Literal;
Другие вопросы по тегам