While working on an API today I realized the JMSSerializer does not support neither DateTimeInteface nor DateTimeImmutable. I am going to walk you through the necessary steps to serialize DateTimeImmutable
objects using JMSSerializer.
Wow... #jmsserializer does not support DateTimeImmutable (https://t.co/cbkWc3MdqY)... Looks like I have to build my own handler... #symfony
— David Fuhr (@DavidFuhr) September 28, 2016
Building an own handler requires not much code. The only problem is that documentation is scattered to many places and sometimes hard to find. I’m working on a full-stack Symfony 2.8 with JMSSerializerBundle installed. So make sure you are on the same page before starting.
The first step is to create a Handler:
You could also create a Subscriber, but I think the Handler is more straight forward. Read the JMSSerializer Documentation on Handlers to learn more.
Next we have to register our Handler as a service:
This is documented in the JMSSerializerBundle Documentation, but setting my Service to private
did not work (learn more about Private Services in Symfony), and setting the type
to DateTimeInterface
did not work either.
So if you use want to format DateTime
as well you have to adjust the config value in the Bundle’s configuration:
That’s it. Now your DateTime
and DateTimeImmutable
objects should be serialized to string similar to 2016-09-28T12:54:07+00:00
. If you encounter problems or have further questions find me on Twitter.