php-hydrator
php-hydrator copied to clipboard
Simple PHP hydrator
PHP Object Hydrator
The library allows to hydrate objects from an array and extract raw objects's values to an array.
Installation
Install with composer:
composer require elisdn/php-hydrator
Usage samples
Hydrating an object from an associative array:
$post = $this->hydrator->hydrate(Post::class, [
'id' => $id,
'date' => $date,
'title' => $title,
])
Extracting of object values to an array by list of properies:
$data = $this->hydrator->extract($post, ['id', 'date', 'title'])
For example if we have Post
entity:
class Post
{
private $id;
private $title;
private $date;
public function __construct($id, $title)
{
$this->id = $id;
$this->title = $title;
$this->date = new DateTimeImmutable();
}
public function getId()
{
return $this->id;
}
public function getTitle()
{
return $this->title;
}
}
then we can use the hydrator in any repository class:
class SqlPostRepository implements PostRepository
{
private $db;
private $hydrator;
public function get($id): Post
{
if (!$row = $this->db->selectOne('posts', ['id' => $id])) {
throw new NotFoundException('Post not found.');
}
return $this->hydrator->hydrate(Post::class, [
'id' => $row['id'],
'date' => DateTimeImmutable::createFromFormat('Y-m-d', $row['create_date']),
'title' => $row['title'],
]);
}
public function persist(Post $post): void
{
$data = $this->hydrator->extract($post, ['id', 'date', 'title'])
$this->db->insert('posts', [
'id' => $data['id'],
'create_date' => $data['date']->format('Y-m-d'),
'title' => $data['title'],
);
}
}