Installation
composer require egeloen/serializer
Add to config/app.php under providers:
Egeloen\Serializer\SerializerServiceProvider::class,
Basic Usage Register the facade (optional but recommended):
'aliases' => [
'Serializer' => Egeloen\Serializer\SerializerFacade::class,
],
Serialize an object to JSON:
$data = new stdClass();
$data->name = "Test";
$serialized = Serializer::serialize($data, 'json');
First Use Case: API Response
return response()->json(Serializer::serialize($model, 'json'), 200);
Model Serialization
// Serialize a model to XML for legacy system integration
$xml = Serializer::serialize($user, 'xml');
Request Deserialization
// Parse incoming YAML payload (e.g., from a form)
$data = Serializer::deserialize($request->yamlData, 'yaml', stdClass::class);
Nested Object Handling
// Customize serialization of nested objects
$serializer = Serializer::getInstance();
$serializer->addNormalizer(new CustomNormalizer());
Conditional Serialization
// Skip sensitive fields
$serializer = Serializer::getInstance();
$serializer->setIgnoredAttributes(['password', 'api_token']);
public function handle($request, Closure $next) {
$request->merge(Serializer::deserialize($request->body, 'json', []));
return $next($request);
}
FormRequest to auto-deserialize:
protected function rules() {
$data = Serializer::deserialize($this->input(), 'json', []);
return [
'name' => 'required',
// ...
];
}
toArray() for complex transformations:
public function toArray($request) {
return Serializer::serialize($this->resource, 'json');
}
Circular References
CircularReferenceException. Handle with:
try {
$serialized = Serializer::serialize($object, 'json');
} catch (\Egeloen\Serializer\Exception\CircularReferenceException $e) {
$serializer = Serializer::getInstance();
$serializer->setMaxDepth(10); // Increase recursion limit
}
Type Safety
$data = Serializer::deserialize($json, 'json', stdClass::class);
if (!$data instanceof stdClass) {
throw new \InvalidArgumentException("Deserialization failed");
}
XML Quirks
$serializer = Serializer::getInstance();
$serializer->setXmlRootName('root'); // Avoid default 'object'
$serializer = Serializer::getInstance();
$serializer->setDebug(true); // Logs errors to storage/logs/serializer.log
$normalizers = Serializer::getInstance()->getNormalizers();
// Check registered normalizers for conflicts
Custom Normalizers
class CustomNormalizer implements \Egeloen\Serializer\Normalizer\NormalizerInterface {
public function normalize($object, $format, array $context = []) {
return ['custom' => $object->getCustomData()];
}
public function supportsNormalization($data, $format) {
return $data instanceof CustomObject;
}
}
Serializer::getInstance()->addNormalizer(new CustomNormalizer());
Override Default Formats
// Replace JSON serializer with a custom one
$serializer = Serializer::getInstance();
$serializer->setEncoder('json', new CustomJsonEncoder());
Contextual Serialization
$context = ['include_relations' => true];
$serialized = Serializer::serialize($model, 'json', $context);
How can I help you explore Laravel packages today?