コード例 #1
0
    /**
     * {@inheritDoc}
     */
    public function createService(ServiceLocatorInterface $serviceLocator)
    {
        /** @var $options \JMSSerializerModule\Options\Handlers */
        $options = $this->getOptions($serviceLocator, 'eventdispatcher');
        $handlerRegistry = new EventDispatcher();
        foreach ($options->getSubscribers() as $subscriberName) {
            $subscriber = $subscriberName;
            if (is_string($subscriber)) {
                if ($serviceLocator->has($subscriber)) {
                    $subscriber = $serviceLocator->get($subscriber);
                } elseif (class_exists($subscriber)) {
                    $subscriber = new $subscriber();
                }
            }
            if ($subscriber instanceof EventSubscriberInterface) {
                $handlerRegistry->addSubscriber($subscriber);
                continue;
            }
            throw new InvalidArgumentException(sprintf('Invalid subscriber "%s" given, must be a service name, ' . 'class name or an instance implementing JMS\\Serializer\\Handler\\SubscribingHandlerInterface;
', is_object($subscriberName) ? get_class($subscriberName) : (is_string($subscriberName) ? $subscriberName : gettype($subscriber))));
        }
        return $handlerRegistry;
    }
コード例 #2
0
 protected function setUp()
 {
     $this->factory = new MetadataFactory(new AnnotationDriver(new AnnotationReader()));
     $this->handlerRegistry = new HandlerRegistry();
     $this->handlerRegistry->registerSubscribingHandler(new ConstraintViolationHandler());
     $this->handlerRegistry->registerSubscribingHandler(new DateHandler());
     $this->handlerRegistry->registerSubscribingHandler(new FormErrorHandler(new IdentityTranslator(new MessageSelector())));
     $this->handlerRegistry->registerSubscribingHandler(new PhpCollectionHandler());
     $this->handlerRegistry->registerSubscribingHandler(new ArrayCollectionHandler());
     $this->handlerRegistry->registerHandler(GraphNavigator::DIRECTION_SERIALIZATION, 'AuthorList', $this->getFormat(), function (VisitorInterface $visitor, $object, array $type, Context $context) {
         return $visitor->visitArray(iterator_to_array($object), $type, $context);
     });
     $this->handlerRegistry->registerHandler(GraphNavigator::DIRECTION_DESERIALIZATION, 'AuthorList', $this->getFormat(), function (VisitorInterface $visitor, $data, $type, Context $context) {
         $type = array('name' => 'array', 'params' => array(array('name' => 'integer', 'params' => array()), array('name' => 'JMS\\Serializer\\Tests\\Fixtures\\Author', 'params' => array())));
         $elements = $visitor->getNavigator()->accept($data, $type, $context);
         $list = new AuthorList();
         foreach ($elements as $author) {
             $list->add($author);
         }
         return $list;
     });
     $this->dispatcher = new EventDispatcher();
     $this->dispatcher->addSubscriber(new DoctrineProxySubscriber());
     $namingStrategy = new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy());
     $objectConstructor = new UnserializeObjectConstructor();
     $this->serializationVisitors = new Map(array('json' => new JsonSerializationVisitor($namingStrategy), 'xml' => new XmlSerializationVisitor($namingStrategy), 'yml' => new YamlSerializationVisitor($namingStrategy)));
     $this->deserializationVisitors = new Map(array('json' => new JsonDeserializationVisitor($namingStrategy), 'xml' => new XmlDeserializationVisitor($namingStrategy)));
     $this->serializer = new Serializer($this->factory, $this->handlerRegistry, $objectConstructor, $this->serializationVisitors, $this->deserializationVisitors, $this->dispatcher);
 }