2013-10-12 3 views
2

Я написал пользовательский класс Part (MyNamespace\Mvc\Router\Http\Part), который теперь должен использоваться вместо Zend\Mvc\Router\Http\Part. Как загрузить его в список invokables Zend\Mvc\Router\RoutePluginManager?Как заменить invokable класс в RoutePluginManager в Zend Framework 2?

enter image description here

-

EDIT:

Просто попробовал с

namespace Application; 

use Zend\Mvc\MvcEvent; 

class Module { 
    ... 
    public function onBootstrap(MvcEvent $mvcEvent) { 
     ... 
     $routePluginManager = $mvcEvent->getRouter()->getRoutePluginManager(); 
     $routePluginManager->setInvokableClass('part', 'MyWorkspace\Mvc\Router\Http\Part'); 
     ... 
    } 
    ... 
} 

, но это не работает - стандартный класс Zend до сих пор используется.

ответ

1

Либо ваш класс Модуль реализации Zend\ModuleManager\Feature\RouteProviderInterface и объявить метод getRouteConfig требует

<?php 
namespace Application; 

use Zend\ModuleManager\Feature; 

class Module implements Feature\RouteProviderInterface 
{ 

    public function getRouteConfig() 
    { 
     return array(
      'invokables' => array(
       'part' => 'ITT\Mvc\Router\Http\Part', 
      ), 
     ); 
    } 

} 

Или добавьте его в файл module.config.php под route_manager ключа

return array(

    'route_manager' => array(
     'invokables' => array(
      'part' => 'ITT\Mvc\Router\Http\Part', 
     ), 
    ), 

); 
+1

Спасибо за ваш ответ! Ни вариант с «getRouteConfig()», ни тот, что с «module.config.php» работает для меня. Класс загружается в 'PoutePluginManager', но затем' Zend \ Mvc \ Router \ Http \ Part # match (...) 'вызывается вместо' MyNamespace \ Mvc \ Router \ Http \ Part # match (.. .) '. – automatix

+1

A заглянул в ['Zend \ Mvc \ Router \ Http \ TreeRouteStack # init()'] (https://github.com/weierophinney/Component_ZendMvc/blob/master/Router/Http/TreeRouteStack.php#L43). Это место, где менеджер плагинов маршрута получает свои invokables. Оба класса загружаются - как и Zend, так и мои. У них разные канонические имена ('RoutePluginManager # canonicalNames'). Мое подозрение в том, что мой пользовательский класс «проигнорирован», потому что объект, который вызывает поиск «Path # match (...)» в списке invokables по каноническому имени 'zendmvcrouterhttppart'. – automatix

+1

Создание экземпляра класса 'Part' происходит в' Zend \ Mvc [\ Router \ RoutePluginManager # setInvokableClass (...) '] (https://github.com/zendframework/zf2/blob/master/library/ Zend/Mvc/Router/RoutePluginManager.php # L43). Он получает каноническое имя «part» и смотрит в массив invokables. И мой класс custoom не существует. Я использую другой пользовательский класс, который работает (пользовательский маршрут 'MyNamespace \ Mvc \ Router \ Http \ UnicodeRegex'), но его также нет. Таких классов нет вообще. Значение «part» - это класс Zend 'Part', и он запускается. – automatix

Смежные вопросы