On this page



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"}]'


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();
    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();
        'artist' => 'David Bowie',
        'title'  => 'Let\'s Dance',
        'tracks' => '[{"title":"Modern Love","duration":"4:46"},{"title":"China Girl","duration":"5:32"}]',

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

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"}]"