Zend Framework 2的哪些部分可以很容易地被自定义类替换


Which parts of the Zend Framework 2 can be easily replaced by custom classes?

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)都可以被替换。还有什么?是否有一个类类型的列表,可以像invokables(使用ServiceManager/EventManager)那样用自定义类替换?

我想所有最终"在"服务/插件管理器中的东西都可以被替换。您可以检查控制器、视图或表单元素插件管理器类等地方。您还可以尝试转储整个服务管理器对象,查看它包含哪些密钥,并尝试在Module类中覆盖它们(使用与原始服务类相同的服务类,例如用另一个工厂覆盖工厂创建的服务)。