Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Serializer Laravel Package

egeloen/serializer

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require egeloen/serializer
    

    Add to config/app.php under providers:

    Egeloen\Serializer\SerializerServiceProvider::class,
    
  2. 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');
    
  3. First Use Case: API Response

    return response()->json(Serializer::serialize($model, 'json'), 200);
    

Implementation Patterns

Common Workflows

  1. Model Serialization

    // Serialize a model to XML for legacy system integration
    $xml = Serializer::serialize($user, 'xml');
    
  2. Request Deserialization

    // Parse incoming YAML payload (e.g., from a form)
    $data = Serializer::deserialize($request->yamlData, 'yaml', stdClass::class);
    
  3. Nested Object Handling

    // Customize serialization of nested objects
    $serializer = Serializer::getInstance();
    $serializer->addNormalizer(new CustomNormalizer());
    
  4. Conditional Serialization

    // Skip sensitive fields
    $serializer = Serializer::getInstance();
    $serializer->setIgnoredAttributes(['password', 'api_token']);
    

Integration Tips

  • Laravel HTTP Middleware: Deserialize request bodies in middleware:
    public function handle($request, Closure $next) {
        $request->merge(Serializer::deserialize($request->body, 'json', []));
        return $next($request);
    }
    
  • Form Requests: Extend FormRequest to auto-deserialize:
    protected function rules() {
        $data = Serializer::deserialize($this->input(), 'json', []);
        return [
            'name' => 'required',
            // ...
        ];
    }
    
  • API Resources: Use in toArray() for complex transformations:
    public function toArray($request) {
        return Serializer::serialize($this->resource, 'json');
    }
    

Gotchas and Tips

Pitfalls

  1. Circular References

    • Default behavior throws CircularReferenceException. Handle with:
      try {
          $serialized = Serializer::serialize($object, 'json');
      } catch (\Egeloen\Serializer\Exception\CircularReferenceException $e) {
          $serializer = Serializer::getInstance();
          $serializer->setMaxDepth(10); // Increase recursion limit
      }
      
  2. Type Safety

    • Deserializing to incorrect classes may fail silently. Validate with:
      $data = Serializer::deserialize($json, 'json', stdClass::class);
      if (!$data instanceof stdClass) {
          throw new \InvalidArgumentException("Deserialization failed");
      }
      
  3. XML Quirks

    • Namespaces in XML may cause issues. Use:
      $serializer = Serializer::getInstance();
      $serializer->setXmlRootName('root'); // Avoid default 'object'
      

Debugging

  • Enable Verbose Errors
    $serializer = Serializer::getInstance();
    $serializer->setDebug(true); // Logs errors to storage/logs/serializer.log
    
  • Inspect Normalizers
    $normalizers = Serializer::getInstance()->getNormalizers();
    // Check registered normalizers for conflicts
    

Extension Points

  1. 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());
    
  2. Override Default Formats

    // Replace JSON serializer with a custom one
    $serializer = Serializer::getInstance();
    $serializer->setEncoder('json', new CustomJsonEncoder());
    
  3. Contextual Serialization

    $context = ['include_relations' => true];
    $serialized = Serializer::serialize($model, 'json', $context);
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
terminal42/code-quality-tools
codifyo/ts-generator-bundle
andydefer/laravel-cluster
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky