あなたは正しい道を進んでいます。あなたがしなければならないことは、 ではなく、detach()
あなたに電話することだけです。以下の例は、 の Zend Framework マニュアルからのものです。NotifyListener
EvenManager
EventManager
リンク: http://framework.zend.com/manual/2.0/en/modules/zend.event-manager.event-manager.html#examples
use Zend\Cache\Cache;
use Zend\EventManager\EventCollection;
use Zend\EventManager\ListenerAggregateInterface;
use Zend\EventManager\EventInterface;
class CacheListener implements ListenerAggregateInterface
{
protected $cache;
protected $listeners = array();
public function __construct(Cache $cache)
{
$this->cache = $cache;
}
public function attach(EventCollection $events)
{
$this->listeners[] = $events->attach('get.pre', array($this, 'load'), 100);
$this->listeners[] = $events->attach('get.post', array($this, 'save'), -100);
}
public function detach(EventManagerInterface $events)
{
foreach ($this->listeners as $index => $listener) {
if ($events->detach($listener)) {
unset($this->listeners[$index]);
}
}
}
public function load(EventInterface $e)
{
// some code to load
}
public function save(EventInterface $e)
{
// some code to save
}
}
この例は、 をAuthenticationListener
実装するリスナー (例: )を準備する方法を非常によく示していますListenerAggregateInterface
。
Module
オブジェクトと同じ状況を想定します。
public function onBootstrap($e)
{
$eventManager = $e->getApplication()->getEventManager();
$cacheListener = new CacheListener($cache);
$cacheListener->detach($eventManager);
}
したがって、NotifyListener
実装するListenerAggregateInterface
か、単にメソッドを持っていると仮定すると、次のようにメソッドをdetach()
記述onBootstrap()
してリスナーを切り離すことができます。
public function onBootstrap($e)
{
$eventManager = $e->getApplication()->getEventManager();
$notifyListener = new NotifyListener();
$notifyListener->detach($eventManager);
}
これがお役に立てば幸いです。フィードバックをお待ちしております:)
ストヤン