Я написал пользовательский класс Part
(MyNamespace\Mvc\Router\Http\Part
), который теперь должен использоваться вместо Zend\Mvc\Router\Http\Part
. Как загрузить его в список invokables Zend\Mvc\Router\RoutePluginManager
?Как заменить invokable класс в RoutePluginManager в Zend Framework 2?
-
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 до сих пор используется.
Спасибо за ваш ответ! Ни вариант с «getRouteConfig()», ни тот, что с «module.config.php» работает для меня. Класс загружается в 'PoutePluginManager', но затем' Zend \ Mvc \ Router \ Http \ Part # match (...) 'вызывается вместо' MyNamespace \ Mvc \ Router \ Http \ Part # match (.. .) '. – automatix
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
Создание экземпляра класса '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