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
introduced
by
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 | } |