Skip to content

Instantly share code, notes, and snippets.

@rosstuck
Created June 22, 2012 12:17
Show Gist options
  • Select an option

  • Save rosstuck/2972413 to your computer and use it in GitHub Desktop.

Select an option

Save rosstuck/2972413 to your computer and use it in GitHub Desktop.

Revisions

  1. Ross Tuck created this gist Jun 22, 2012.
    60 changes: 60 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,60 @@
    use Metadata\MetadataFactory;
    use JMS\SerializerBundle\Serializer\Handler\DeserializationHandlerInterface;
    use JMS\SerializerBundle\Serializer\Handler\SerializationHandlerInterface;
    use JMS\SerializerBundle\Serializer\VisitorInterface;
    use JMS\SerializerBundle\Serializer\XmlDeserializationVisitor;
    use JMS\SerializerBundle\Serializer\Construction\UnserializeObjectConstructor;
    use JMS\SerializerBundle\Serializer\JsonDeserializationVisitor;
    use JMS\SerializerBundle\Serializer\Handler\ObjectBasedCustomHandler;
    use JMS\SerializerBundle\Serializer\Handler\DateTimeHandler;
    use JMS\SerializerBundle\Serializer\Handler\DoctrineProxyHandler;
    use JMS\SerializerBundle\Serializer\XmlSerializationVisitor;
    use JMS\SerializerBundle\Metadata\Driver\AnnotationDriver;
    use JMS\SerializerBundle\Serializer\Naming\CamelCaseNamingStrategy;
    use JMS\SerializerBundle\Serializer\Naming\SerializedNameAnnotationStrategy;
    use JMS\SerializerBundle\Serializer\JsonSerializationVisitor;
    use JMS\SerializerBundle\Serializer\Serializer;
    use Doctrine\Common\Annotations\AnnotationRegistry;

    protected function createSerializer($driver)
    {
    $namingStrategy = new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy());
    $objectConstructor = new UnserializeObjectConstructor();

    $customSerializationHandlers = array(
    new DateTimeHandler(),
    new DoctrineProxyHandler(),
    );

    $customDeserializationHandlers = array(
    new DateTimeHandler(),
    new ArrayCollectionHandler(),
    );

    $serializationVisitors = array(
    'json' => new JsonSerializationVisitor($namingStrategy, $customSerializationHandlers),
    'xml' => new XmlSerializationVisitor($namingStrategy, $customSerializationHandlers),
    );
    $deserializationVisitors = array(
    'json' => new JsonDeserializationVisitor($namingStrategy, $customDeserializationHandlers, $objectConstructor),
    'xml' => new XmlDeserializationVisitor($namingStrategy, $customDeserializationHandlers, $objectConstructor),
    );

    $factory = new MetadataFactory($driver);

    return new Serializer($factory, $serializationVisitors, $deserializationVisitors);
    }

    protected function getBaseDriver()
    {
    if ($this->_baseDriver) {
    return $this->_baseDriver;
    }

    // Register the ORM Annotations in the AnnotationRegistry
    $reader = new \Doctrine\Common\Annotations\SimpleAnnotationReader();
    AnnotationRegistry::registerFile(__DIR__ . '/../AnnotationList.php');
    $reader->addNamespace('JMS\SerializerBundle\Annotation');

    return new AnnotationDriver($reader);
    }