BaseDTO.php 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <?php
  2. namespace Knuckles\Camel;
  3. use Illuminate\Contracts\Support\Arrayable;
  4. use Spatie\DataTransferObject\DataTransferObject;
  5. class BaseDTO extends DataTransferObject implements Arrayable
  6. {
  7. /**
  8. * @var array $custom
  9. * Added so end-users can dynamically add additional properties for their own use.
  10. */
  11. public array $custom = [];
  12. /**
  13. * @param array|self $data
  14. *
  15. * @return static
  16. */
  17. public static function create($data): self
  18. {
  19. if ($data instanceof static) {
  20. return $data;
  21. }
  22. return new static($data);
  23. }
  24. protected function parseArray(array $array): array
  25. {
  26. // Reimplementing here so our DTOCollection items can be recursively toArray'ed
  27. foreach ($array as $key => $value) {
  28. if ($value instanceof Arrayable) {
  29. $array[$key] = $value->toArray();
  30. continue;
  31. }
  32. if (! is_array($value)) {
  33. continue;
  34. }
  35. $array[$key] = $this->parseArray($value);
  36. }
  37. return $array;
  38. }
  39. }