2017-04-20 10 views

答えて

4

あなた自身で工場を上書きすることはできますが、コードの重複が発生し、そのサードパーティモジュールの開発者が行った更新を監視する必要があります。

initializerを使用できますが、各サービスの初期化中に呼び出されるため、パフォーマンスに影響する可能性があります。

あなたが探しているのは委任者です。それは本当の(元の)工場のラッパーのようなものです。ここ
はマルコ・Pivettaによって逸品です:Delegator Factories in Zend Framework 2 これは彼が委任者に説明する方法である:

委任者の工場はかなり本物の工場のラッパーである:それは が持つ本当のサービスを交換するか、私たちを可能に"delegate"、または は、 Zend \ ServiceManagerによって返される前に、ファクトリによって生成されたオブジェクトと対話します。擬似コードで

、委任者工場は、以下を行っている。

サービス= delegatorFactory(工場())。 委任工場

例:

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

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

     return $logger; 
    } 
} 

サービスマネージャの設定:

'delegators' => [ 
    'DbLoggingModule\Logger' => [ 
     'LoggerDelegatorFactory', 
     // can add more of these delegator factories here 
    ], 
], 
関連する問題