https://github.com/dmt-software/jms-parameter-bag-handler
A JMS serializer handler that serializes and deserializes bag of parameters that are not predefined
https://github.com/dmt-software/jms-parameter-bag-handler
jms-serializer parameterbag
Last synced: 3 months ago
JSON representation
A JMS serializer handler that serializes and deserializes bag of parameters that are not predefined
- Host: GitHub
- URL: https://github.com/dmt-software/jms-parameter-bag-handler
- Owner: dmt-software
- License: mit
- Created: 2018-05-17T13:09:27.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2023-03-29T23:01:34.000Z (about 3 years ago)
- Last Synced: 2024-11-18T09:10:00.001Z (over 1 year ago)
- Topics: jms-serializer, parameterbag
- Language: PHP
- Homepage:
- Size: 22.5 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# ParameterBag Handler
[](https://travis-ci.org/dmt-software/jms-parameter-bag-handler)
[](https://scrutinizer-ci.com/g/dmt-software/jms-parameter-bag-handler/?branch=master)
[](https://scrutinizer-ci.com/g/dmt-software/jms-parameter-bag-handler/?branch=master)
## Install
`composer require dmt-software/jms-parameter-bag-handler`
## Usage
### Configure Serializer
```php
configureHandlers(
function (HandlerRegistry $registry) {
$registry->registerSubscribingHandler(new ParameterBagHandler());
}
)
->build();
```
### Enable ParameterBag
The serializer behavior is extended with a new type called ParameterBag.
To use this functionality add the JMS Serializer annotation ```@Type("ParameterBag")``` to the property of your class.
By default the ParameterBag uses instances of ```DMT\Serializer\Parameter```. You can override this behavior by adding
the FQCN to the ParameterBag type, eg ```@Type("ParameterBag")```. If you do so, make sure your
custom parameters implement the ```DMT\Serializer\ParameterInterface```.
```php
parameters;
}
/**
* @param ParameterBag $parameters
*/
public function setParameters(ParameterBag $parameters): void
{
$this->parameters = $parameters;
}
}
```
Further reading on [JMS-serializer](https://jmsyst.com/libs/serializer), like YAML or XML configuration, visit
https://jmsyst.com/libs/serializer
### Deserialize Json
```php
deserialize('{"parameters":{"foo":"bar", "baz":false}}', Entity::class, 'json');
$parameters = $object->getParameters();
// iterate over all the parameters
foreach ($parameters as $parameter) {
/** @var ParameterInterface $parameter */
var_dump($parameter->getValue()); // outputs string(3) "bar", bool(false)
}
// or access an expected parameter by it's name
var_dump($parameters['baz']); // outputs class DMT\Serializer\Parameter#61 (2) { ... }
```
### Serialize to Json
```php
setName('foo');
$parameter->setValue(1);
$object = new Entity();
$object->setParameters(new ParameterBag([$parameter]));
/** @var Serializer $serializer */
echo $serializer->serialize($object, 'json'); // outputs {"parameters":{"foo":1}}
```