Add a `SerializerServiceProvider`.

Usage
-----

```php
<?php

use Silex\Application;
use Silex\Provider\SerializerServiceProvider;
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 ($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 = $app['request']->getFormat();

    if (!$page instanceof Page) {
        $this->abort("No page found for 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+");
```
Aren't parameters set after the provider is registered ?

fabpot/Silex@9766faf0616a67cd0ff7437950d5453deebac9c4
Grammar tweak
Update logout_path with pattern info per #423

Because logout_path must exist inside the existing pattern, the example
in the docs would not work by default.
merged branch DerManoMann/form-listener-class (PR #463)

This PR was merged into the master branch.

Commits
-------

49cde04 Change 'security.authentication_listener.form._proto' definition to the same signature all other _protos have.

Discussion
----------

Change 'security.authentication_listener.form._proto' definition to the ...

...same signature all other _protos have.

This is a fix to remove the unussed (third) $class parameter from the 'security.authentication_listener.form._proto' definition and allow to customize the class via $options['listener_class'] instead.

Fixes https://github.com/fabpot/Silex/issues/459

---------------------------------------------------------------------------

by sli-systems at 2012-08-29T23:20:15Z

Any feedback on this? I'd love to get this sorted so if there are issues let me know and I'll address them.

---------------------------------------------------------------------------

by sli-systems at 2012-09-11T20:55:26Z

bump again - feedback either way would be appreciated.

---------------------------------------------------------------------------

by sli-systems at 2012-09-30T21:54:04Z

bump again (again) - it would be helpful to know if there is interest in this - it seems pointless to keep rebasing without any way of knowing if it is worthwhile...

---------------------------------------------------------------------------

by sli-systems at 2012-10-23T21:54:12Z

Just did another rebase - how long does it usually take for a one line PR to get accepted or rejected? Sorry, but I do not know what else to do other than bumping this thread every now and then...

If this PR is not good, please just reject it so I do not have to waste any more time on it.

Thanks, mano
merged branch greygore/logout-docs (PR #514)

This PR was merged into the master branch.

Commits
-------

5e83c75 Update logout_path with pattern info per #423

Discussion
----------

Update logout_path with pattern info per #423

Because logout_path must exist inside the existing pattern, the example
in the docs would not work by default.
tweaked previous merge
merged branch marijn/feature/serializer-provider (PR #401)

This PR was merged into the master branch.

Commits
-------

03bccc8 Add a `SerializerServiceProvider`.

Discussion
----------

Add a SerializerServiceProvider

Usage
-----

```php
<?php

use Silex\Application;
use Silex\Provider\SerializerServiceProvider;
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 ($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 = $app['request']->getFormat();

    if (!$page instanceof Page) {
        $this->abort("No page found for 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+");
```

---------------------------------------------------------------------------

by GromNaN at 2012-06-28T14:29:50Z

You can create this ServiceProvider in its own repository and put a link on the wiki :
https://github.com/fabpot/Silex/wiki/Third-Party-ServiceProviders

---------------------------------------------------------------------------

by fabpot at 2012-06-28T14:38:42Z

I think it makes sense to have this in core.

---------------------------------------------------------------------------

by marijn at 2012-06-28T14:41:03Z

Ok. Haven't tested in "in the wild" yet (working on that as we speak). Any pointers, concerns or other comments are more than welcome :smile:

Should I add more documentation or is this enough?

---------------------------------------------------------------------------

by igorw at 2012-06-28T14:47:03Z

@fabpot I agree. :+1:

Please add some more tests.

---------------------------------------------------------------------------

by marijn at 2012-06-28T14:50:13Z

@igorw in regards to the tests: what would you like to see added? I figured we should only test if the serializer is configured properly, not if it actually serializes.

---------------------------------------------------------------------------

by igorw at 2012-06-28T15:11:06Z

You're right, no need to test serialization. Looks good. :+1:

---------------------------------------------------------------------------

by marijn at 2012-06-28T16:02:20Z

Somehow I have trouble running the full test suite. The swift mailer configuration doesn't seem to work. Is this a known issue?

---------------------------------------------------------------------------

by GromNaN at 2012-06-28T20:33:14Z

A new trait can also be added with the method `serialize()`.

---------------------------------------------------------------------------

by marijn at 2012-06-28T21:34:58Z

At the moment I haven't got a working version of PHP 5.4 so I cannot test traits.

---------------------------------------------------------------------------

by marijn at 2012-06-29T19:01:21Z

It seems to me that adding a `trait` for the serializer doesn't really make any sense: the API for the `Serializer` component is pretty extensive, it would add a lot of methods to the `Application`. What do you think?

---------------------------------------------------------------------------

by stof at 2012-06-30T10:32:07Z

@marijn the trait would cover the simple use of the serializer, i.e. a ``serialize()`` method. It is not intended to cover all possible use cases.

---------------------------------------------------------------------------

by fabpot at 2012-06-30T18:31:32Z

Can you squash your commits before I merge? Thanks.

---------------------------------------------------------------------------

by marijn at 2012-07-10T10:58:58Z

@fabpot this has been squashed. I think it's mergeable :smile:

---------------------------------------------------------------------------

by marijn at 2012-08-17T13:39:17Z

Have I missed something here? To the best of my knowledge, this is mergeable. Please let me know if there is anything I still need to do :smile:

---------------------------------------------------------------------------

by alanbem at 2012-10-27T20:39:02Z

What is status of this PR? Is it going to be merged?

---------------------------------------------------------------------------

by marijn at 2012-10-27T21:14:12Z

I have no clue, @alanbem. If you're in need of a serializer for Silex you can either merge this in your own fork of Silex or use the [`jms/serializer-service-provider`][1] that I released.

[1]: https://github.com/pink-tie/JMSSerializerServiceProvider

---------------------------------------------------------------------------

by igorw at 2012-10-27T23:15:53Z

@fabpot this looks good to me.
merged branch KuiKui/patch-1 (PR #486)

This PR was merged into the master branch.

Commits
-------

26c50d4 Grammar tweak
44c11ca Aren't parameters set after the provider is registered ?

Discussion
----------

Aren't parameters set after the provider is registered ?

fabpot/Silex@9766faf0616a67cd0ff7437950d5453deebac9c4

---------------------------------------------------------------------------

by igorw at 2012-10-01T14:19:19Z

:+1:
fixed markup
updated FormTrait documentation

form function takes only 2 parameters: $data and $options
Log a little more information about exceptions
Flipped condition
merged branch hiciu/master (PR #521)

This PR was merged into the master branch.

Commits
-------

33d802e updated FormTrait documentation

Discussion
----------

Updated doc/providers/form.rst

Hello,

Only one line changed. FormTrait adds ```function form($data, $options)``` to \Silex\Application, not ```form($name, $data, $options)``` like createBuilder; this example in docs was throwing exception.

(this is my first pull request and now I see I should have done it in separate branch; sorry. I hope I didn't broke anything)

---------------------------------------------------------------------------

by igorw at 2012-10-29T02:25:44Z

:+1:
merged branch davedevelopment/better-exception-logging (PR #523)

This PR was merged into the master branch.

Commits
-------

5c5dae1 Flipped condition
9f4a122 Log a little more information about exceptions

Discussion
----------

Log a little more information about exceptions

This takes a little from Symfony's ExceptionListener, logging a little more appropriate information. Without this code, 404's etc are logged with a blank message.

---------------------------------------------------------------------------

by MarcinKleczek at 2012-10-29T11:53:41Z

+1
added missing symfony/config dep in the fat archive (closes #522)
Make SecurityServiceProvider::addFakeRoute less confusing
Add note about defining the login route, closes #447
merged branch igorw/security-login-route (PR #527)

This PR was merged into the master branch.

Commits
-------

dc8abdd Add note about defining the login route, closes #447

Discussion
----------

Add note about defining the login route, closes #447
merged branch igorw/security-addfakeroute (PR #526)

This PR was merged into the master branch.

Commits
-------

ff7bac3 Make SecurityServiceProvider::addFakeRoute less confusing

Discussion
----------

Make SecurityServiceProvider::addFakeRoute less confusing