On this page
Caution
The documentation you are viewing is for an older version of this component.
Switch to the latest (v4) version.
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"}]"
}
*/