2016-04-07 8 views
1

設定/ autoload/global.php私は自分のデータベースの設定しか持っていません。 私のモデルで私は持っています:ZendFramework2:global.phpの設定をserviceLocatorのないモデルにすることは可能ですか?

public function __construct($adapter = null) 
    { 
     if ($adapter) { 
      $this->adapter = $adapter; 
     } else { 
      ... //here I need to get the config without serviceLocator 
     } 
    } 
public function attach(EventManagerInterface $events) 
    { 
     $sharedEvents = $events->getSharedManager(); 
     $this->listeners[] = $sharedEvents->attach("*", "redirect", array($this, "onRedirect")); 
    } 

    public function detach(EventManagerInterface $events) 
    { 
     foreach ($this->listeners as $index => $listener) 
     { 
      if ($events->detach($listener)) 
      { 
       unset($this->listeners[$index]); 
      } 
     } 
    } 

    public function onRedirect(EventInterface $e) 
    { 
     ... 
    } 

理由は簡単です。イベントがトリガーされたときに何かをデータベースに追加しようとしています。リスナーでserviceLocatorを取得できません。どうしてか分かりません。

so ... serviceLocatorを使わずに設定ファイルを取得することは可能ですか?

+0

私はむしろあなたがリスナーの内側 'ServiceLocator'を得ることができない理由を見つけるためにしようとするだろう。これは可能なはずです。あなたの質問では、あなたは実際の問題を解決していません。リスナーの中で 'ServiceLocator'を取得できない理由の詳細を投稿できますか? – Wilt

答えて

0

あなたは、他のサービスのように工場を通して、あなたのリスナー内部ServiceLocatorを得ることができる必要があります:

<?php 

namespace Application\Listener\Factory; 

use Zend\ServiceManager\FactoryInterface; 
use Zend\ServiceManager\ServiceLocatorInterface; 
use Application\Listener\SomeListener; 

/** 
* Factory for creating the listener 
*/ 
class SomeListenerFactory implements FactoryInterface 
{ 
    /** 
    * Create SomeListener 
    * 
    * @param ServiceLocatorInterface $serviceLocator 
    * @return SomeListener 
    */ 
    public function createService(ServiceLocatorInterface $serviceLocator) 
    { 
     $config = $serviceLocator->get('config'); 
     $adapter = // create adapter using config and use it to create your listener 
     return new SomeListener($adapter); 
    } 
} 

すると内部のリスナーファクトリを登録し、あなたのmodule.config.php:今

'service_manager' => array(
    'factories' => array(
     'Application\Listener\SomeListener' => 'Application\Listener\Factory\SomeListenerFactory', 
    ) 
) 

あなたが得ることができますあなたのリスナーは、あなたが望む場所であればサービスマネージャーからご連絡ください:

$someListener = $serviceManager->get('Application\Listener\SomeListener'); 

あなたは本当に(私はこれが必要になる理由はいかなる理由が表示されないと、それはZF2の原則に反している)あなたのクラス内の設定をしたい場合は、あなたの設定ファイルを含めることができます

あなたglobal.config.phpファイル

あなたは、単にPHPを使用してコンテンツを取得することができます
<?php 
return array(
    'key' => 'value' 
); 

は、次のとおりです。

function fetchConfig() 
{ 
    include("path/to/global.config.php"); 
} 
関連する問題