1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- Event System
- ============
- The serializer dispatches different events during the serialization, and
- deserialization process which you can use to hook in and alter the default
- behavior.
- Register an Event Listener, or Subscriber
- -----------------------------------------
- The difference between listeners, and subscribers is that listener do not know to which events they listen
- while subscribers contain that information. Thus, subscribers are easier to share, and re-use. Listeners
- on the other hand, can be simple callables and do not require a dedicated class.
- .. code-block :: php
- class MyEventSubscriber implements JMS\Serializer\EventDispatcher\EventSubscriberInterface
- {
- public static function getSubscribedEvents()
- {
- return array(
- array('event' => 'serializer.pre_serialize', 'method' => 'onPreSerialize'),
- );
- }
- public function onPreSerialize(JMS\Serializer\EventDispatcher\PreSerializeEvent $event)
- {
- // do something
- }
- }
- $builder
- ->configureListeners(function(JMS\Serializer\EventDispatcher\EventDispatcher $dispatcher) {
- $dispatcher->addListener('serializer.pre_serialize',
- function(JMS\Serializer\EventDispatcher\PreSerializeEvent $event) {
- // do something
- }
- );
- $dispatcher->addSubscriber(new MyEventSubscriber());
- })
- ;
- Events
- ------
- serializer.pre_serialize
- ~~~~~~~~~~~~~~~~~~~~~~~~
- This is dispatched before a type is visited. You have access to the visitor,
- data, and type. Listeners may modify the type that is being used for
- serialization.
- **Event Object**: ``JMS\Serializer\EventDispatcher\PreSerializeEvent``
- serializer.post_serialize
- ~~~~~~~~~~~~~~~~~~~~~~~~~
- This is dispatched right before a type is left. You can for example use this
- to add additional data for an object that you normally do not save inside
- objects such as links.
- **Event Object**: ``JMS\Serializer\EventDispatcher\ObjectEvent``
- serializer.pre_deserialize
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~
- .. versionadded : 0.12
- Event was added
- This is dispatched before an object is deserialized. You can use this to
- modify submitted data, or modify the type that is being used for deserialization.
- **Event Object**: ``JMS\Serializer\EventDispatcher\PreDeserializeEvent``
- serializer.post_deserialize
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~
- This is dispatched after a type is processed. You can use it to normalize
- submitted data if you require external services for example, or also to
- perform validation of the submitted data.
- **Event Object**: ``JMS\Serializer\EventDispatcher\ObjectEvent``
|