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;