ZF3 - 删除第三方模块的抽象工厂

时间:2017-04-20 06:58:20

标签: zend-framework2 zend-framework3

有没有办法扩展模块的抽象工厂并删除扩展工厂?我必须对它进行一些修改,但是如果我扩展它并注册我的新工厂,旧工厂仍然是注册的,不是吗?

1 个答案:

答案 0 :(得分:4)

您可以使用自己的工厂覆盖工厂,但这会导致代码重复,您必须监控第三方模块的开发人员所做的更新。

您可以使用initializer但是在每个服务的初始化期间调用它,因此它可能会对性能产生影响。

您正在寻找的是委托人。它是真实(原始)工厂的包装 以下是Marco Pivetta的优秀文章:Delegator Factories in Zend Framework 2 这是他解释委托人的方式:

  

委托工厂几乎是一个真正的工厂的包装:它   允许我们用“委托”代替真实服务,或者   在返回之前与工厂生成的对象进行交互   Zend \ ServiceManager。

     

在伪代码中,委托人工厂正在做以下事情:

     

service = delegatorFactory(factory());

委托人工厂的示例:

class LoggerDelegatorFactory implements DelegatorFactoryInterface
{
    public function createDelegatorWithName(
        ServiceLocatorInterface $serviceLocator,
        $name,
        $requestedName,
        $callback
    ) {
        $logger = $callback();

        $logger->clearFilters();
        $logger->addFormatter(new HttpRequestContextFormatter());

        return $logger;
    }
}

Service Manager配置:

'delegators' => [
    'DbLoggingModule\Logger' => [
        'LoggerDelegatorFactory',
        // can add more of these delegator factories here
    ],
],