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
)?
Я предполагаю, что все, что попадает в "диспетчер услуг/плагинов", можно заменить. Вы можете проверять места, такие как контроллеры, просматривать или создавать классы плагинов элементов элемента. Вы также можете попытаться сбросить весь объект сервис-менеджера и посмотреть, какие ключи он удерживает, и попытаться перезаписать их в вашем классе Module
(используя тот же класс обслуживания, что и оригинал, например, перезапись фабрично созданной службы с другой фабрикой).