Ver índice de contenidos del libro

A.8. SerializerServiceProvider

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+");