chubbyphp-serialization icon indicating copy to clipboard operation
chubbyphp-serialization copied to clipboard

A simple serialization.

chubbyphp-serialization

CI Coverage Status Mutation testing badge Latest Stable Version Total Downloads Monthly Downloads

bugs code_smells coverage duplicated_lines_density ncloc sqale_rating alert_status reliability_rating security_rating sqale_index vulnerabilities

Description

A simple serialization.

Requirements

  • php: ^8.1
  • chubbyphp/chubbyphp-decode-encode: ^1.1
  • doctrine/inflector: ^1.4.4|^2.0.8
  • psr/http-message: ^1.1|^2.0
  • psr/link: ^1.1.1|^2.0.1
  • psr/log: ^2.0|^3.0

Suggest

  • chubbyphp/chubbyphp-container: ^2.2
  • pimple/pimple: ^3.5
  • psr/container: ^2.0.2
  • symfony/dependency-injection: ^5.4.31|^6.3.8|^7.0 (symfony integration)

Installation

Through Composer as chubbyphp/chubbyphp-serialization.

composer require chubbyphp/chubbyphp-serialization "^4.0"

Usage

Accessor

  • MethodAccessor
  • PropertyAccessor

Encoder

  • Encoder

Type Encoder

  • JsonTypeEncoder
  • JsonxTypeEncoder
  • UrlEncodedTypeEncoder
  • XmlTypeEncoder
  • YamlTypeEncoder

Link

  • Link
  • LinkBuilder

Normalizer

  • Normalizer

Field Normalizer

  • CallbackFieldNormalizer
  • DateTimeFieldNormalizer
  • FieldNormalizer
Relation Field Normalizer
  • EmbedManyFieldNormalizer
  • EmbedOneFieldNormalizer
  • ReferenceManyFieldNormalizer
  • ReferenceOneFieldNormalizer

Link Normalizer

  • CallbackLinkNormalizer

Normalizer Context

  • NormalizerContext
  • NormalizerContextBuilder

NormalizerObjectMappingRegistry

  • NormalizerObjectMappingRegistry

Mapping

NormalizationFieldMapping

  • NormalizationFieldMapping
  • NormalizationFieldMappingBuilder

NormalizationLinkMapping

  • NormalizationLinkMapping
  • NormalizationLinkMappingBuilder

NormalizationObjectMapping

  • AdvancecNormalizationObjectMapping
  • SimpleNormalizationObjectMapping

LazyNormalizationObjectMapping

  • CallableNormalizationObjectMapping
  • LazyNormalizationObjectMapping

Policy

  • AndPolicy
  • CallbackPolicy
  • GroupPolicy
  • NotPolicy
  • NullPolicy
  • OrPolicy

ServiceFactory

chubbyphp-container

  • SerializationServiceFactory

chubbyphp-laminas-config-factory

  • EncoderFactory
  • NormalizerFactory
  • NormalizerObjectMappingRegistryFactory
  • SerializerFactory

ServiceProvider

  • SerializationServiceProvider

Serializer

<?php

use Chubbyphp\DecodeEncode\Encoder\Encoder;
use Chubbyphp\DecodeEncode\Encoder\JsonTypeEncoder;
use Chubbyphp\DecodeEncode\Encoder\JsonxTypeEncoder;
use Chubbyphp\DecodeEncode\Encoder\UrlEncodedTypeEncoder;
use Chubbyphp\DecodeEncode\Encoder\XmlTypeEncoder;
use Chubbyphp\DecodeEncode\Encoder\YamlTypeEncoder;
use Chubbyphp\Serialization\Normalizer\Normalizer;
use Chubbyphp\Serialization\Normalizer\NormalizerObjectMappingRegistry;
use Chubbyphp\Serialization\Serializer;
use MyProject\Serialization\ModelMapping;
use MyProject\Model\Model;
use Psr\Http\Message\ServerRequestInterface;

$logger = ...;

$serializer = new Serializer(
    new Normalizer(
        new NormalizerObjectMappingRegistry([
            new ModelMapping()
        ]),
        $logger
    ),
    new Encoder([
        new JsonTypeEncoder(),
        new JsonxTypeEncoder(),
        new UrlEncodedTypeEncoder(),
        new XmlTypeEncoder(),
        new YamlTypeEncoder()
    ])
);

$model = new Model;
$model->setName('php');

$json = $serializer->serialize(
    $model,
    'application/json'
);

echo $json;
// '{"name": "php"}'

$model = new Model;
$model->setName('php');

$data = $serializer->normalize(
    $model
);

print_r($data);
// ['name' => 'php']

print_r($serializer->getContentTypes());
//[
//    'application/json',
//    'application/jsonx+xml',
//    'application/x-www-form-urlencoded',
//    'application/xml',
//    'application/x-yaml'
//]

echo $serializer->encode(
    ['name' => 'php'],
    'application/json'
);
// '{"name": "php"}'

Copyright

2024 Dominik Zogg