コード例 #1
0
 /**
  * {@inheritDoc}
  */
 public function getServiceConfig()
 {
     return array('aliases' => array('jms_serializer.metadata_driver' => 'jms_serializer.metadata.chain_driver', 'jms_serializer.object_constructor' => 'jms_serializer.unserialize_object_constructor'), 'factories' => array('jms_serializer.handler_registry' => new HandlerRegistryFactory(), 'jms_serializer.datetime_handler' => function (ServiceManager $sm) {
         $options = $sm->get('Configuration');
         $options = new Handlers($options['jms_serializer']['handlers']);
         $dateTimeOptions = $options->getDatetime();
         return new DateHandler($dateTimeOptions['default_format'], $dateTimeOptions['default_timezone']);
     }, 'jms_serializer.event_dispatcher' => new EventDispatcherFactory(), 'jms_serializer.metadata.cache' => new MetadataCacheFactory(), 'jms_serializer.metadata.yaml_driver' => new MetadataDriverFactory('JMS\\Serializer\\Metadata\\Driver\\YamlDriver'), 'jms_serializer.metadata.xml_driver' => new MetadataDriverFactory('JMS\\Serializer\\Metadata\\Driver\\XmlDriver'), 'jms_serializer.metadata.php_driver' => new MetadataDriverFactory('JMS\\Serializer\\Metadata\\Driver\\PhpDriver'), 'jms_serializer.metadata.file_locator' => function (ServiceManager $sm) {
         $options = $sm->get('Configuration');
         $options = new Metadata($options['jms_serializer']['metadata']);
         $directories = array();
         foreach ($options->getDirectories() as $directory) {
             if (!isset($directory['path'], $directory['namespace_prefix'])) {
                 throw new \RuntimeException(sprintf('The directory must have the attributes "path" and "namespace_prefix, "%s" given.', implode(', ', array_keys($directory))));
             }
             $directories[rtrim($directory['namespace_prefix'], '\\')] = rtrim($directory['path'], '\\/');
         }
         return new FileLocator($directories);
     }, 'jms_serializer.metadata.annotation_driver' => function (ServiceManager $sm) {
         $options = $sm->get('Configuration');
         $options = new Metadata($options['jms_serializer']['metadata']);
         $reader = new AnnotationReader();
         $reader = new CachedReader(new IndexedReader($reader), $sm->get($options->getAnnotationCache()));
         return new AnnotationDriver($reader);
     }, 'jms_serializer.metadata.chain_driver' => function (ServiceManager $sm) {
         $annotationDriver = $sm->get('jms_serializer.metadata.annotation_driver');
         $phpDriver = $sm->get('jms_serializer.metadata.php_driver');
         $xmlDriver = $sm->get('jms_serializer.metadata.xml_driver');
         $yamlDriver = $sm->get('jms_serializer.metadata.yaml_driver');
         return new DriverChain(array($yamlDriver, $xmlDriver, $phpDriver, $annotationDriver));
     }, 'jms_serializer.metadata.lazy_loading_driver' => function (ServiceManager $sm) {
         return new LazyLoadingDriver($sm, 'jms_serializer.metadata_driver');
     }, 'jms_serializer.metadata_factory' => function (ServiceManager $sm) {
         $options = $sm->get('Configuration');
         $options = new Metadata($options['jms_serializer']['metadata']);
         $lazyLoadingDriver = $sm->get('jms_serializer.metadata.lazy_loading_driver');
         return new MetadataFactory($lazyLoadingDriver, 'Metadata\\ClassHierarchyMetadata', $options->getDebug());
     }, 'jms_serializer.camel_case_naming_strategy' => function (ServiceManager $sm) {
         $options = $sm->get('Configuration');
         $options = new PropertyNaming($options['jms_serializer']['property_naming']);
         return new CamelCaseNamingStrategy($options->getSeparator(), $options->getLowercase());
     }, 'jms_serializer.identical_naming_strategy' => function (ServiceManager $sm) {
         return new IdenticalPropertyNamingStrategy();
     }, 'jms_serializer.serialized_name_annotation_strategy' => function (ServiceManager $sm) {
         $options = $sm->get('Configuration');
         if (isset($options['jms_serializer']['naming_strategy'])) {
             if ($options['jms_serializer']['naming_strategy'] == 'identical') {
                 return new SerializedNameAnnotationStrategy($sm->get('jms_serializer.identical_naming_strategy'));
             }
         }
         return new SerializedNameAnnotationStrategy($sm->get('jms_serializer.camel_case_naming_strategy'));
     }, 'jms_serializer.naming_strategy' => 'JMSSerializerModule\\Service\\NamingStrategyFactory', 'jms_serializer.json_serialization_visitor' => function (ServiceManager $sm) {
         $options = $sm->get('Configuration');
         $options = new Visitors($options['jms_serializer']['visitors']);
         $jsonOptions = $options->getJson();
         $vistor = new JsonSerializationVisitor($sm->get('jms_serializer.naming_strategy'));
         $vistor->setOptions($jsonOptions['options']);
         return $vistor;
     }, 'jms_serializer.json_deserialization_visitor' => function (ServiceManager $sm) {
         return new JsonDeserializationVisitor($sm->get('jms_serializer.naming_strategy'), $sm->get('jms_serializer.object_constructor'));
     }, 'jms_serializer.xml_serialization_visitor' => function (ServiceManager $sm) {
         return new XmlSerializationVisitor($sm->get('jms_serializer.naming_strategy'));
     }, 'jms_serializer.xml_deserialization_visitor' => function (ServiceManager $sm) {
         $options = $sm->get('Configuration');
         $options = new Visitors($options['jms_serializer']['visitors']);
         $xmlOptions = $options->getXml();
         $visitor = new XmlDeserializationVisitor($sm->get('jms_serializer.naming_strategy'), $sm->get('jms_serializer.object_constructor'));
         $visitor->setDoctypeWhitelist($xmlOptions['doctype_whitelist']);
         return $visitor;
     }, 'jms_serializer.yaml_serialization_visitor' => function (ServiceManager $sm) {
         return new YamlSerializationVisitor($sm->get('jms_serializer.naming_strategy'));
     }, 'jms_serializer.serializer' => 'JMSSerializerModule\\Service\\SerializerFactory'), 'invokables' => array('jms_serializer.unserialize_object_constructor' => 'JMS\\Serializer\\Construction\\UnserializeObjectConstructor', 'jms_serializer.array_collection_handler' => 'JMS\\Serializer\\Handler\\ArrayCollectionHandler', 'jms_serializer.doctrine_proxy_subscriber' => 'JMS\\Serializer\\EventDispatcher\\Subscriber\\DoctrineProxySubscriber'));
 }
コード例 #2
0
ファイル: test.php プロジェクト: whisller/tech-data
<?php

include './vendor/autoload.php';
use Doctrine\Common\Annotations\AnnotationRegistry;
use GuzzleHttp\Client;
use JMS\Serializer\Naming\IdenticalPropertyNamingStrategy;
use JMS\Serializer\Naming\SerializedNameAnnotationStrategy;
use JMS\Serializer\SerializerBuilder;
use JMS\Serializer\XmlDeserializationVisitor;
AnnotationRegistry::registerLoader('class_exists');
/**
 * START: Prepare Serializer
 */
$xmlVisitor = new XmlDeserializationVisitor(new SerializedNameAnnotationStrategy(new IdenticalPropertyNamingStrategy()));
$xmlVisitor->setDoctypeWhitelist(['<!DOCTYPE XGResponse SYSTEM "http://intcom.xml.techdata-europe.com:8080/XMLGate/XMLGateResponse.dtd">']);
$serializer = \JMS\Serializer\SerializerBuilder::create()->addDefaultSerializationVisitors()->setDeserializationVisitor('tech_data', $xmlVisitor)->build();
/**
 * STOP
 */
/**
 * START: Create Tech Data models
 */
$orderEnv = new \Whisller\TechData\Components\OrderEnv('my-auth-code', 1);
$deliver = new \Whisller\TechData\Components\DeliverTo();
$address = new \Whisller\TechData\Components\Address('69, Flat X', 'Nice Street', 'Nibylandia', 'UK');
$deliver->setAddress($address);
$head = new \Whisller\TechData\Components\Head('my title', new DateTime('now', new DateTimeZone('Europe/London')), $deliver);
$line = new \Whisller\TechData\Components\Line(1, 123, 55, [new \Whisller\TechData\Components\AddItemID('EAN', 'my-ean')]);
$body = new \Whisller\TechData\Components\Body($line);
$order = new \Whisller\TechData\Components\Order('GBP', $head, $body);
$orderEnv->addOrder($order);