On this page
Strategies
Hydrator
Available since version 3.1.0
The HydratorStrategy
can be used to hydrate an object and its child objects
with data from a nested array and vice versa.
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 hydrator and a classname for the handled object.
$strategy = new Laminas\Hydrator\Strategy\HydratorStrategy(
new Laminas\Hydrator\ObjectPropertyHydrator(),
stdClass::class
);
Hydrate data
$hydrated = $strategy->hydrate([
'firstName' => 'David',
'lastName' => 'Bowie',
]);
echo $hydrated->firstName; // 'David'
echo $hydrated->lastName; // 'Bowie'
Extract data
$class = new stdClass();
$class->firstName = 'David';
$class->lastName = 'Bowie';
$extracted = $strategy->extract($class);
var_dump($extracted); // ['firstName' => 'David', 'lastName' => 'Bowie']
Example
The following example shows the hydration for a class with a property that consumes another class.
An example class which represents a music album.
class Album
{
private ?int $id = null;
private ?string $title = null;
private ?Artist $artist = null;
public function __construct(
?int $id = null,
?string $title = null,
?Artist $artist = null
) {
$this->id = $id;
$this->title = $title;
$this->artist = $artist;
}
public function getId() : ?int
{
return $this->id;
}
public function getTitle() : ?string
{
return $this->title;
}
public function getArtist() : ?Artist
{
return $this->artist;
}
}
An example class representing the artist of an album.
class Artist
{
private ?string $firstName;
private ?string $lastName;
public function __construct(
?string $firstName = null,
?string $lastName = null
) {
$this->firstName = $firstName;
$this->lastName = $lastName;
}
public function getFirstName() : ?string
{
return $this->firstName;
}
public function getLastName() : ?string
{
return $this->lastName;
}
}
Create hydrator and add strategy
Create a hydrator and add HydratorStrategy
as a strategy, with a hydrator and a
classname for the handled object.
$hydrator = new Laminas\Hydrator\ReflectionHydrator();
$hydrator->addStrategy(
'artist',
new Laminas\Hydrator\Strategy\HydratorStrategy(
new Laminas\Hydrator\ReflectionHydrator(),
Artist::class
)
);
Hydrate data
Create an instance of the example Album
class and hydrate data.
$album = new Album();
$hydrator->hydrate(
[
'id' => 100,
'title' => 'The Next Day (Deluxe Version)',
'artist' => [
'firstName' => 'David',
'lastName' => 'Bowie',
],
],
$album
);
echo $album->getTitle(); // 'The Next Day (Deluxe Version)'
echo $album->getArtist()->getFirstName(); // 'David'
echo $album->getArtist()->getLastName(); // 'Bowie'
Extract data
var_dump($hydrator->extract($album));
/*
array(3) {
'id' =>
int(100)
'title' =>
string(29) "The Next Day (Deluxe Version)"
'artist' =>
array(2) {
'firstName' =>
string(5) "David"
'lastName' =>
string(5) "Bowie"
}
}
*/