On this page
Strategies
Serializable
The SerializableStrategy
can be used for serializing and deserializing PHP
types to and from different representations.
The strategy uses laminas-serializer for serializing and deserializing of data.
Basic usage
The following code example shows standalone usage without adding the strategy to a hydrator.
Create and configure strategy
Create the strategy and set a serializer adapter.
$strategy = new Laminas\Hydrator\Strategy\SerializableStrategy(
new Laminas\Serializer\Adapter\Json()
);
For available serializer adapters see the documentation of laminas-serializer.
Hydrate data
$json = '[{"title":"Modern Love","duration":"4:46"},{"title":"China Girl","duration":"5:32"}]';
$hydrated = $strategy->hydrate($json);
echo $hydrated[1]['title']; // 'China Girl'
echo $hydrated[1]['duration']; // '5:32'
Extract data
$data = [
[
'title' => 'Modern Love',
'duration' => '4:46',
],
[
'title' => 'China Girl',
'duration' => '5:32',
],
// …
];
$extracted = $strategy->extract($data);
echo $extracted; // '[{"title":"Modern Love","duration":"4:46"},{"title":"China Girl","duration":"5:32"}]'
Example
The following example shows the hydration for a class with a property where the data is provided by a JSON string.
An example class which represents a music album with tracks.
class Album
{
private ?string $title;
private ?string $artist;
private array $tracks;
public function __construct(
?string $title = null,
?string $artist = null,
array $tracks = []
) {
$this->title = $title;
$this->artist = $artist;
$this->tracks = $tracks;
}
public function getTitle() : ?string
{
return $this->title;
}
public function getArtist() : ?string
{
return $this->artist;
}
public function getTracks() : array
{
return $this->tracks;
}
}
Create hydrator and add strategy
Create a hydrator and add SerializableStrategy
as a strategy, with a
serializer adapter which converts the JSON string to array
and vice versa.
$hydrator = new Laminas\Hydrator\ReflectionHydrator();
$hydrator->addStrategy(
'tracks',
new Laminas\Hydrator\Strategy\SerializableStrategy(
new Laminas\Serializer\Adapter\Json()
)
);
Hydrate data
Create an instance of the example Album
class and hydrate data.
$album = new Album();
$hydrator->hydrate(
[
'artist' => 'David Bowie',
'title' => 'Let\'s Dance',
'tracks' => '[{"title":"Modern Love","duration":"4:46"},{"title":"China Girl","duration":"5:32"}]',
],
$album
);
echo $album->getTitle(); // "Let's Dance"
echo $album->getArtist(); // 'David Bowie'
echo $album->getTracks()[1]['title']; // 'China Girl'
echo $album->getTracks()[1]['duration']; // '5:32'
Extract data
var_dump($hydrator->extract($album));
/*
array(3) {
'title' =>
string(11) "Let's Dance"
'artist' =>
string(11) "David Bowie"
'tracks' =>
string(84) "[{"title":"Modern Love","duration":"4:46"},{"title":"China Girl","duration":"5:32"}]"
}
*/