Issues (150)

src/Transformers/DefaultTransformer.php (1 issue)

Severity
1
<?php
2
3
namespace SoliDry\Transformers;
4
5
use Illuminate\Database\Eloquent\Collection;
6
use League\Fractal\TransformerAbstract;
7
use SoliDry\Blocks\EntitiesTrait;
8
use SoliDry\Exceptions\ModelException;
9
use SoliDry\Extension\BaseFormRequest;
10
use SoliDry\Extension\BaseModel;
11
use SoliDry\Helpers\ConfigHelper;
12
use SoliDry\Helpers\MigrationsHelper;
13
14
/**
15
 * Class DefaultTransformer
16
 * transforms data into json-api reliable format for any abstract entities
17
 *
18
 * @package SoliDry\Transformers
19
 */
20
class DefaultTransformer extends TransformerAbstract
21
{
22
    use EntitiesTrait;
0 ignored issues
show
The trait SoliDry\Blocks\EntitiesTrait requires some properties which are not provided by SoliDry\Transformers\DefaultTransformer: $generator, $types
Loading history...
23
24
    public const INCLUDE_PREFIX = 'include';
25
26
    /**
27
     * @var BaseFormRequest
28
     */
29
    private BaseFormRequest $formRequest;
30
31
    /**
32
     * DefaultTransformer constructor.
33
     *
34
     * @param BaseFormRequest $formRequest
35
     */
36
    public function __construct(BaseFormRequest $formRequest)
37
    {
38
        $this->formRequest = $formRequest;
39
        $this->setAvailableIncludes($formRequest->relations());
40
    }
41
42
    /**
43
     * @param BaseModel | Collection $object
44
     *
45
     * @return array
46
     */
47
    public function transform($object)
48
    {
49
        $arr = [];
50
        if ($object instanceof BaseModel) {
51
            $props = get_object_vars($this->formRequest);
52
            try {
53
                foreach ($props as $prop => $value) {
54
                    $arr[$prop] = $object->$prop;
55
                }
56
            } catch (ModelException $e) {
57
                $e->getTraceAsString();
58
            }
59
        }
60
        if ($object instanceof Collection) {
61
            foreach ($object as $k => $v) {
62
                $attrs = $v->getAttributes();
63
                if (empty($attrs) === false) {
64
                    return $attrs;
65
                }
66
            }
67
        }
68
69
        return $arr;
70
    }
71
72
    /**
73
     * @param string $name     Method name
74
     * @param array $arguments Method arguments
75
     *
76
     * @return \League\Fractal\Resource\Collection | \League\Fractal\Resource\Item
77
     */
78
    public function __call($name, $arguments)
79
    {
80
        // getting entity relation name, ex.: includeAuthor - author
81
        $entityName = str_replace(self::INCLUDE_PREFIX, '', $name);
82
        $formRequestEntity = $this->getFormRequestEntity(ConfigHelper::getModuleName(), $entityName);
83
        $formRequest = new $formRequestEntity();
84
        $entityNameLow = MigrationsHelper::getTableName($entityName);
85
        // getting object, ex.: Book
86
        $obj = $arguments[0];
87
        $entity = $obj->$entityNameLow;
88
        if ($entity instanceof Collection) {
89
            return $this->collection($entity, new DefaultTransformer($formRequest), $entityNameLow);
90
        }
91
        return $this->item($entity, new DefaultTransformer($formRequest), $entityNameLow);
92
    }
93
}