-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathBlogPostNormalizer.php
More file actions
40 lines (34 loc) · 1.37 KB
/
BlogPostNormalizer.php
File metadata and controls
40 lines (34 loc) · 1.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
namespace Solid\App\BlogPost\Domain\Model;
use DateTimeImmutable;
final class BlogPostNormalizer implements Normalizer
{
public function normalize(BlogPost $blogPost): array
{
return [
'id' => $blogPost->getId(),
'author' => $blogPost->getAuthor(),
'title' => $blogPost->getTitle(),
'content' => $blogPost->getContent(),
'created_at' => $blogPost->getCreatedAt()->format('Y-m-d H:i:s'),
'updated_at' => $blogPost->getUpdatedAt()?->format('Y-m-d H:i:s'),
];
}
public function denormalize(array $data): BlogPost
{
$blogPost = new BlogPost($data['id'], $data['author'], $data['title'], $data['content']);
$this->setTimestampProperties($blogPost, $data['created_at'], $data['updated_at']);
return $blogPost;
}
private function setTimestampProperties(BlogPost $blogPost, string $created, ?string $updated): void
{
$createdAt = new \ReflectionProperty($blogPost, 'createdAt');
$createdAt->setAccessible(true);
$createdAt->setValue($blogPost, new DateTimeImmutable($created));
if (null !== $updated) {
$updatedAt = new \ReflectionProperty($blogPost, 'updatedAt');
$updatedAt->setAccessible(true);
$updatedAt->setValue($blogPost, new DateTimeImmutable($updated));
}
}
}