zend-blog-3-backend
90 строк · 2.3 Кб
1<?php
2/**
3* Created by PhpStorm.
4* User: morontt
5* Date: 15.02.15
6* Time: 19:36
7*/
8
9namespace App\API\Transformers;
10
11use App\DTO\ArticleDTO;
12use App\Entity\Post;
13use App\Entity\Tag;
14use App\Utils\RuTransform;
15use League\Fractal\Resource\ResourceInterface;
16
17class PostTransformer extends BaseTransformer
18{
19/**
20* @var array
21*/
22protected array $availableIncludes = [
23'category',
24];
25
26/**
27* @param Post $item
28*
29* @return array
30*/
31public function transform(Post $item)
32{
33return [
34'id' => $item->getId(),
35'title' => $item->getTitle(),
36'url' => $item->getUrl(),
37'category' => $item->getCategory()->getId(),
38'categoryId' => $item->getCategory()->getId(),
39'hidden' => $item->isHide(),
40'disableComments' => $item->isDisableComments(),
41'text' => $item->getRawText(),
42'description' => $item->getDescription(),
43'tagsString' => implode(
44', ',
45$item->getTags()->map(
46function (Tag $tag) {
47return $tag->getName();
48}
49)->toArray()
50),
51'timeCreated' => $this->dateTimeToISO($item->getTimeCreated()),
52'lastUpdate' => $this->dateTimeToISO($item->getLastUpdate()),
53];
54}
55
56/**
57* @param Post $entity
58* @param ArticleDTO $data
59*/
60public static function reverseTransform(Post $entity, ArticleDTO $data)
61{
62if (empty($data['title'])) {
63$data['title'] = 'no subject';
64}
65
66$entity
67->setTitle($data['title'])
68->setHide($data['hidden'])
69->setDisableComments($data['disableComments'])
70->setRawText($data['text'])
71->setDescription($data['description'])
72;
73
74if ($data['url']) {
75$entity->setUrl($data['url']);
76} else {
77$entity->setUrl(RuTransform::ruTransform($data['title']));
78}
79}
80
81/**
82* @param Post $entity
83*
84* @return ResourceInterface
85*/
86public function includeCategory(Post $entity): ResourceInterface
87{
88return $this->collection([$entity->getCategory()], new CategoryTransformer(), 'categories');
89}
90}
91