Serializer¶
The SerializerServiceProvider provides a service for serializing objects.
Parameters¶
None.
Services¶
- serializer: An instance of Symfony\Component\Serializer\Serializer.
- serializer.encoders: Symfony\Component\Serializer\Encoder\JsonEncoder and Symfony\Component\Serializer\Encoder\XmlEncoder.
- serializer.normalizers: Symfony\Component\Serializer\Normalizer\CustomNormalizer and Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer.
Registering¶
$app->register(new Mascot\Provider\SerializerServiceProvider());
Usage¶
The SerializerServiceProvider provider provides a serializer service:
use Mascot\Application;
use Mascot\Provider\SerializerServiceProvider;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
$app = new Application();
$app->register(new SerializerServiceProvider());
// only accept content types supported by the serializer via the assert method.
$app->get("/pages/{id}.{_format}", function (Request $request, $id) use ($app) {
// assume a page_repository service exists that returns Page objects. The
// object returned has getters and setters exposing the state.
$page = $app['page_repository']->find($id);
$format = $request->getRequestFormat();
if (!$page instanceof Page) {
$app->abort("No page found for id: $id");
}
return new Response($app['serializer']->serialize($page, $format), 200, array(
"Content-Type" => $request->getMimeType($format)
));
})->assert("_format", "xml|json")
->assert("id", "\d+");
Using a Cache¶
To use a cache, register a class implementing Doctrine\Common\Cache\Cache:
$app->register(new Mascot\Provider\SerializerServiceProvider());
$app['serializer.normalizers'] = function () use ($app) {
return [new \Symfony\Component\Serializer\Normalizer\CustomNormalizer(),
new \Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer(new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()), $app['my_custom_cache']))
];
};