El proveedor SerializerServiceProvider
proporciona un servicio para serializar objetos.
A.8.1. Parámetros de configuración
Este proveedor no define ningún parámetro de configuración.
A.8.2. Servicios proporcionados
El proveedor proporciona los siguientes servicios:
serializer
: es una instancia de la clase Serializer.serializer.encoders
: servicios que codifican la información a serializar. Actualmente hay dos codificadores definidos: JsonEncoder y XmlEncoder.serializer.normalizers
: servicios que normalizan la información a serializar. Actualmente están definidos dos normalizadores: CustomNormalizer and GetSetMethodNormalizer.
A.8.3. Cómo se registra el proveedor
El siguiente código muestra un ejemplo de cómo registrar este proveedor:
$app->register(new Silex\Provider\SerializerServiceProvider());
Nota El componente Serializer
de Symfony que utiliza este proveedor se incluye cuando descargas Silex en forma de archivo comprimido. Si instalas Silex mediante Composer, debes añadir esta dependencia ejecutando el siguiente comando:
$ composer require symfony/serializer
A.8.4. Ejemplos de uso
Las operaciones relacionadas con el proveedor SerializerServiceProvider
normalmente se realizan a través del servicio serializer
:
use Silex\Application;
use Silex\Provider\SerializerServiceProvider;
use Symfony\Component\HttpFoundation\Response;
$app = new Application();
$app->register(new SerializerServiceProvider());
// el método assert() restringe los formatos de la petición a solamente aquellos
// formatos que soporta el serializador
$app->get("/pages/{id}.{_format}", function ($id) use ($app) {
// se supone que existe un servicio llamado "page_repository" y que devuelve
// objetos de tipo "Page" que disponen de los correspondientes getters y setters
$page = $app['page_repository']->find($id);
$format = $app['request']->getRequestFormat();
if (!$page instanceof Page) {
$app->abort("No se ha encontrado la página con id: $id");
}
return new Response($app['serializer']->serialize($page, $format), 200, array(
"Content-Type" => $app['request']->getMimeType($format)
));
})->assert("_format", "xml|json")
->assert("id", "\d+");