Skip to content

Instantly share code, notes, and snippets.

@rosstuck
Created June 22, 2012 12:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rosstuck/2972413 to your computer and use it in GitHub Desktop.
Save rosstuck/2972413 to your computer and use it in GitHub Desktop.
Bootstrapping JMS
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);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment