b2pweb/bdf-serializer-bundle
composer require b2pweb/bdf-serializer-bundle
config/bundles.php:
Bdf\SerializerBundle\BdfSerializerBundle::class => ['all' => true],
config/packages/bdf_serializer.yaml:
bdf_serializer:
cache:
pool: 'cache.app' # For production
For testing, override in config/packages/test/bdf_serializer.yaml:
bdf_serializer:
cache:
pool: null
Inject the SerializerInterface into a controller or service:
use Symfony\Component\Serializer\SerializerInterface;
class MyController extends AbstractController
{
public function serializeEntity(SerializerInterface $serializer, MyEntity $entity): JsonResponse
{
$data = $serializer->serialize($entity, 'json', [
'groups' => ['default'],
]);
return new JsonResponse($data, 200, [], true);
}
}
Group-Based Serialization: Use groups to control which properties are serialized:
#[Groups(['default'])]
private string $name;
#[Groups(['admin'])]
private string $secretKey;
Then serialize with:
$serializer->serialize($entity, 'json', ['groups' => ['default']]);
Custom Normalizers:
Register a custom normalizer in config/packages/bdf_serializer.yaml:
bdf_serializer:
normalizers:
- Bdf\SerializerBundle\Normalizer\CustomNormalizer
Contextual Serialization: Pass context to the serializer for dynamic behavior:
$serializer->serialize($entity, 'json', [
'groups' => ['default'],
'context' => ['locale' => 'fr'],
]);
Deserialization:
$deserialized = $serializer->deserialize($jsonData, MyEntity::class, 'json');
Symfony\Component\Form\FormFactory for form-to-entity hydration.kernel.request to pre-process serialization contexts.Caching Overhead:
pool: null) in tests can slow down serialization significantly.php bin/console cache:clear
Circular References:
ignore_circular_references context option to avoid infinite loops:
$serializer->serialize($entity, 'json', ['ignore_circular_references' => true]);
Group Conflicts:
#[Groups(['group1', 'group2'])] for shared properties.Deprecated Methods:
Serializer::serialize() directly; prefer SerializerInterface for better dependency injection.Enable Debug Mode:
Add to config/packages/dev/bdf_serializer.yaml:
bdf_serializer:
debug: true
This logs serialization/deserialization details.
Check Normalizer Order:
If serialization behaves unexpectedly, verify normalizer priority in config/packages/bdf_serializer.yaml:
bdf_serializer:
normalizers:
- { class: App\Normalizer\FirstNormalizer, priority: 100 }
- { class: App\Normalizer\SecondNormalizer, priority: 50 }
Custom Encoders: Register a custom encoder (e.g., for XML):
bdf_serializer:
encoders:
- Bdf\SerializerBundle\Encoder\XmlEncoder
Event Subscribers:
Subscribe to serializer.normalize or serializer.deserialize events for pre/post-processing:
use Symfony\Component\Serializer\SerializerEvent;
public function onSerialize(SerializerEvent $event) {
$data = $event->getData();
// Modify $data before serialization
$event->setData($data);
}
Dynamic Group Resolution:
Override group resolution logic by implementing Bdf\SerializerBundle\Resolver\GroupResolverInterface.
How can I help you explore Laravel packages today?