handlers = $handlers; } public function registerSubscribingHandler(SubscribingHandlerInterface $handler) { foreach ($handler->getSubscribingMethods() as $methodData) { if ( ! isset($methodData['type'], $methodData['format'])) { throw new \RuntimeException(sprintf('For each subscribing method a "type" and "format" attribute must be given, but only got "%s" for %s.', implode('" and "', array_keys($methodData)), get_class($handler))); } $directions = array(GraphNavigator::DIRECTION_DESERIALIZATION, GraphNavigator::DIRECTION_SERIALIZATION); if (isset($methodData['direction'])) { $directions = array($methodData['direction']); } foreach ($directions as $direction) { $method = isset($methodData['method']) ? $methodData['method'] : self::getDefaultMethod($direction, $methodData['type'], $methodData['format']); $this->registerHandler($direction, $methodData['type'], $methodData['format'], array($handler, $method)); } } } public function registerHandler($direction, $typeName, $format, $handler) { $this->handlers[$direction][$typeName][$format] = $handler; } public function getHandler($direction, $typeName, $format) { if ( ! isset($this->handlers[$direction][$typeName][$format])) { return null; } return $this->handlers[$direction][$typeName][$format]; } }