Как сказано в приведенных выше комментариях: зарегистрироваться на начальной загрузку-событие и добавить новые маршруты туда:
<?php
namespace Application;
use Zend\Module\Manager,
Zend\EventManager\StaticEventManager;
class Module
{
public function init(Manager $moduleManager)
{
$events = StaticEventManager::getInstance();
$events->attach('bootstrap', 'bootstrap', array($this, 'initCustom'), 100);
}
public function initCustom($e)
{
$app = $e->getParam('application');
$r = \Zend\Mvc\Router\Http\Segment::factory(array(
'route' => '/test',
'defaults' => array(
'controller' => 'test'
)
)
);
$app->getRouter()->addRoute('test',$r);
}
}
$app = $e->getParam('application');
действительно возвращает экземпляр Zend\Mvc\Application
. Посмотрите там, какие дополнительные части вы можете получить там. Событие bootstrap
запускается до фактической диспетчеризации.
Обратите внимание, что маршруты ZendFramework 1 не всегда совместимы с ZendFramework 2.
Обновление комментариев
public function initCustom($e)
{
$app = $e->getParam('application');
// Init a new router object and add your own routes only
$app->setRouter($newRouter);
}
Обновление нового вопроса
<?php
namespace Application;
use Zend\Module\Manager,
Zend\EventManager\StaticEventManager;
class Module
{
public function init(Manager $moduleManager)
{
$events = StaticEventManager::getInstance();
$events->attach('bootstrap', 'bootstrap', array($this, 'initCustom'), 100);
}
public function initCustom($e)
{
$zendApplication = $e->getParam('application');
$customApplication = new System\Application();
$customApplication->initRoutes($zendApplication->getRouter());
// ... other init stuff of your custom application
}
}
Это происходит только в один ZF2 модуль (названный Application
, который может быть только один, а) , Это не соответствует вашим потребностям? Вы могли бы:
- продлить обычай module autoloader
- расширения Zend \ Mvc \ Application для вашей собственной логики
- сделать код ZF2-совместимый
Вы попытались получить доступ к маршрутизатору напрямую (Zend \ Mvc \ Application.getRouter())? – Fge
Возвратите объект Zend \ Mvc \ Router \ SimpleRouteStack без контроллера/action/params, переданный по URL-адресу. –
@Fge Я пробовал Zend \ Mvc \ PhpEnvironment \ Request.getRequestUri(), но безуспешно. –