Zend Framework 2 предоставляет возможность использовать пользовательские классы вместо invokables
поставляется с рамкой. Например. ViewHelper
классы:
namespace Application;
...
class Module {
public function onBootstrap(MvcEvent $mvcEvent) {
$application = $mvcEvent->getApplication();
$serviceManager = $application->getServiceManager();
$viewHelperManager = $serviceManager->get('ViewHelperManager');
$viewHelperManager->setInvokableClass('headmeta', 'MyNamespace\View\Helper\HeadMeta');
}
...
public function getAutoloaderConfig() {
return array(
...
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
'MyNamespace' => __DIR__ . '/../../vendor/MyNamespace/library/MyNamespace',
),
),
);
}
}
Итак, все invocable
с (особенно ViewHelper
s) можно заменить. Что-то еще? Есть ли список типов классов, которые можно заменить на пользовательские, например invokables
(с использованием ServiceManager
/ EventManager
)?
Я предполагаю, что все, что заканчивается ‘в’ диспетчере сервисов / плагинов, может быть заменено. Вы можете проверить такие места, как контроллер, Посмотреть или же элемент формы классы менеджера плагинов. Вы также можете попробовать сбросить весь объект Service Manager и посмотреть, какие ключи он содержит, и попытаться перезаписать их в своем Module
класс (используя тот же класс обслуживания, что и оригинал, например, перезаписывая созданный на фабрике сервис другим заводом).
Других решений пока нет …