remi-san / serializer
A universal, config-less PHP serializer for all purpose.
Installs: 14 039
Dependents: 2
Suggesters: 2
Security: 0
Stars: 3
Watchers: 2
Forks: 0
Open Issues: 0
Requires
- php: >=5.5
- doctrine/instantiator: ^1.0
- ocramius/generated-hydrator: ^1.2|^2.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^1.10
- league/event: ^2.1
- league/tactician: ^1.0
- mockery/mockery: ^0.9
- phpunit/phpunit: ^4.5
- squizlabs/php_codesniffer: ~2.0
- symfony/console: ^2.7|^3.0
Suggests
- league/event: Allows to deal with event within your application.
- league/tactician: Allows to deal with command within your application.
- symfony/console: To use the console module to generate proxies
README
Based on GeneratedHydrator, it serializes recursively, adding metadata to the generated array in order to be able to deserialize an object without knowing its type beforehand.
Installation
Serializer can be found on Packagist. The recommended way to install Serializer is through composer.
Run the following on the command line:
composer require remi-san/serializer=@stable
And install dependencies:
composer install
Usage
$classMapper = new RemiSan\Serializer\Mapper\DefaultMapper( new RemiSan\Serializer\NameExtractor\DefaultNameExtractor() ); $classMapper->register(RemiSan\Serializer\Sample\MySampleClass::class); $serializer = new RemiSan\Serializer\Serializer( $classMapper, new RemiSan\Serializer\Hydrator\HydratorFactory(__DIR__ . '/proxies', true), new RemiSan\Serializer\Formatter\FlatFormatter(), new Doctrine\Instantiator\Instantiator() ); $object = new MySampleClass(new MySampleClass()); $serialized = $serializer->serialize($object); $deserialized = $serializer->deserialize($serialized);
Command usage
When installing through composer, a CLI command is also made available
(in vendor/bin/
or bin/
according to your composer.json
):
bin/serializer generate:cache <cache-path> <fully-qualified-class-name>
It will write the cached version of the hydrator for the requested class in the path you provided.
You'll have to generate cached files for all your serializable classes when
running in production (with the generateProxies
option of the
HydratorFactory
set to `false).
You'll also have to make the autoloader aware of your hydrators by
adding the following to your composer.json
:
{ "autoload": { "classmap": [ "/path/to/cache-dir" ] } }
Details
To be instantiated, the Serializer
needs a SerializableClassMapper
, a HydratorFactory
,
a DataFormatter
and an Instantiator
.
SerializableClassMapper
is used to register the classes the serializer will be able to (de-)serialize.
It needs a SerializableClassNameExtractor
which will be able to normalize the name of the class the way you want it.
HydratorFactory
will retrieve the hydrators needed to deserialize data. It needs the path
to the cache directory
and whether or not, it should generate the proxies on runtime.
DataFormatter
will provide the way the serialized array will be formatted (provided implementations
allow it to format it as a 2-level array or a flat one with a _metadata
key).
Instantiator
will allow to instantiate an object without the constructor based on the fully
qualified class name of the requested object.