74 lines
2.4 KiB
ReStructuredText
74 lines
2.4 KiB
ReStructuredText
|
Serializer
|
||
|
==========
|
||
|
|
||
|
The *SerializerServiceProvider* provides a service for serializing objects.
|
||
|
|
||
|
Parameters
|
||
|
----------
|
||
|
|
||
|
None.
|
||
|
|
||
|
Services
|
||
|
--------
|
||
|
|
||
|
* **serializer**: An instance of `Symfony\\Component\\Serializer\\Serializer
|
||
|
<http://api.symfony.com/master/Symfony/Component/Serializer/Serializer.html>`_.
|
||
|
|
||
|
* **serializer.encoders**: `Symfony\\Component\\Serializer\\Encoder\\JsonEncoder
|
||
|
<http://api.symfony.com/master/Symfony/Component/Serializer/Encoder/JsonEncoder.html>`_
|
||
|
and `Symfony\\Component\\Serializer\\Encoder\\XmlEncoder
|
||
|
<http://api.symfony.com/master/Symfony/Component/Serializer/Encoder/XmlEncoder.html>`_.
|
||
|
|
||
|
* **serializer.normalizers**: `Symfony\\Component\\Serializer\\Normalizer\\CustomNormalizer
|
||
|
<http://api.symfony.com/master/Symfony/Component/Serializer/Normalizer/CustomNormalizer.html>`_
|
||
|
and `Symfony\\Component\\Serializer\\Normalizer\\GetSetMethodNormalizer
|
||
|
<http://api.symfony.com/master/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.html>`_.
|
||
|
|
||
|
Registering
|
||
|
-----------
|
||
|
|
||
|
.. code-block:: php
|
||
|
|
||
|
$app->register(new Silex\Provider\SerializerServiceProvider());
|
||
|
|
||
|
.. note::
|
||
|
|
||
|
Add the Symfony's `Serializer Component
|
||
|
<http://symfony.com/doc/current/components/serializer.html>`_ as a
|
||
|
dependency:
|
||
|
|
||
|
.. code-block:: bash
|
||
|
|
||
|
composer require symfony/serializer
|
||
|
|
||
|
Usage
|
||
|
-----
|
||
|
|
||
|
The ``SerializerServiceProvider`` provider provides a ``serializer`` service::
|
||
|
|
||
|
use Silex\Application;
|
||
|
use Silex\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+");
|