Removes a listener from the active listeners.
/** * Remove a listener from Crud. * * This will also detach it from the EventManager if it's attached. * * @param string $name * @return boolean */ public function removeListener($name) { $listeners = $this->config('listeners'); if (!array_key_exists($name, $listeners)) { return false; } if (isset($this->_listenerInstances[$name])) { $this->_eventManager->detach($this->_listenerInstances[$name]); unset($this->_listenerInstances[$name]); } unset($listeners[$name]); $this->settings['listeners'] = $listeners; }
/** * Load a single event class attached to Crud * * @param string $name * @return void */ protected function _loadListener($name) { $subject = $this->_getSubject(); $config = $this->config(sprintf('listenerClassMap.%s', $name)); list($plugin, $class) = pluginSplit($config, true); App::uses($class, $plugin . 'Controller/Event'); // Make sure to cleanup duplicate events if (isset($this->_listeners[$name])) { $this->_eventManager->detach($this->_listeners[$name]); unset($this->_listeners[$name]); } $this->_listeners[$name] = new $class($subject); $this->_eventManager->attach($this->_listeners[$name]); }
/** * Removes a listener from the active listeners. * @see CakeEventManager::detach() * @return void */ public function detach($callable, $eventKey = null) { if (is_object($callable)) { $key = get_class($callable); unset($this->_listenersMap[$key]); } parent::detach($callable, $eventKey); }
/** * Tests subscribing a listener object and firing the events it subscribed to * * @return void */ public function testDetachSubscriber() { $manager = new CakeEventManager(); $listener = $this->getMock('CustomTestEventListerner', array('secondListenerFunction')); $manager->attach($listener); $expected = array(array('callable' => array($listener, 'secondListenerFunction'), 'passParams' => true)); $this->assertEquals($expected, $manager->listeners('another.event')); $expected = array(array('callable' => array($listener, 'listenerFunction'), 'passParams' => false)); $this->assertEquals($expected, $manager->listeners('fake.event')); $manager->detach($listener); $this->assertEquals(array(), $manager->listeners('fake.event')); $this->assertEquals(array(), $manager->listeners('another.event')); }