On this page
Strategies
BackedEnum
The BackedEnumStrategy provides bidirectional conversion between strings
or integers and Backed Enums.
The code examples below will use the following backed enum, representing a genre of music:
enum Genre: string
{
case Pop = 'pop';
case Blues = 'blues';
case Jazz = 'jazz';
}
Basic Usage
The following code example shows standalone usage without adding the strategy to a hydrator.
Create and Configure Strategy
Create the strategy passing the class name of the enum it will hydrate and extract:
$strategy = new Laminas\Hydrator\Strategy\BackedEnumStrategy(Genre::class);
Hydrate Data
$hydrated = $strategy->hydrate('blues', null);
var_dump($hydrated); // enum Genre::Blues : string("blues");
Extract Data
$extracted = $strategy->extract(Genre::Pop);
var_dump($extracted); // string(3) "pop"
Example
The following example demonstrates hydration for a class with a property.
An example class which represents an album with a music genre:
class Album
{
private ?Genre $genre;
public function __construct(?Genre $genre = null)
{
$this->genre = $genre;
}
public function getGenre() : Genre
{
return $this->genre;
}
}
Create Hydrator and Add Strategy
Create a hydrator and add the BackedEnumStrategy as a strategy:
$hydrator = new Laminas\Hydrator\ReflectionHydrator();
$hydrator->addStrategy(
'genre',
new Laminas\Hydrator\Strategy\BackedEnumStrategy(Genre::class)
);
Hydrate Data
Create an instance of the example class and hydrate data:
$album = new Album();
$hydrator->hydrate(['genre' => 'jazz'], $album);
echo $album->getGenre()->value; // "jazz"
Extract Data
$extracted = $hydrator->extract($album);
echo $extracted['genre']; // "jazz"