SearchData.php 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace App\Models\DTO;
  3. use Illuminate\Contracts\Support\Responsable;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Http\JsonResponse;
  6. class SearchData implements Responsable
  7. {
  8. public static function fromRequest(Request $request): static
  9. {
  10. $page = intval($request->input('page', 1));
  11. $perPage = intval($request->input('per_page', $request->input('perPage', DEFAULT_LIST_PER_PAGE)));
  12. $pageCount = intval($request->input('page_count', $request->input('pageCount', DEFAULT_LIST_PAGE_COUNT)));
  13. $offset = (($page - 1) * $perPage);
  14. $res = new static();
  15. $res->page = $page;
  16. $res->perPage = $perPage;
  17. $res->pageCount = $pageCount;
  18. $res->offset = $offset;
  19. $res->field = $request->input('field');
  20. $res->keyword = $request->input('keyword');
  21. $res->startDate = $request->input('start_date');
  22. $res->endDate = $request->input('end_date');
  23. $res->sort = $request->input('sort', 1);
  24. foreach(array_merge($request->route()->parameters(), $request->all()) as $k => $v) {
  25. if(!property_exists($res, $k)) {
  26. $res->{$k} = $v;
  27. }
  28. }
  29. unset($page, $perPage, $pageCount, $offset);
  30. return $res;
  31. }
  32. public function __set($name, $value)
  33. {
  34. $this->{$name} = $value;
  35. }
  36. public function __get($name): mixed
  37. {
  38. return ($this->{$name} ?? null);
  39. }
  40. public function toResponse($request): JsonResponse
  41. {
  42. return response()->json($this);
  43. }
  44. }