| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- <?php
- namespace App\Models\DTO;
- use Illuminate\Contracts\Support\Responsable;
- use Illuminate\Http\Request;
- use Illuminate\Http\JsonResponse;
- class SearchData implements Responsable
- {
- public static function fromRequest(Request $request): static
- {
- $page = intval($request->input('page', 1));
- $perPage = intval($request->input('per_page', $request->input('perPage', DEFAULT_LIST_PER_PAGE)));
- $pageCount = intval($request->input('page_count', $request->input('pageCount', DEFAULT_LIST_PAGE_COUNT)));
- $offset = (($page - 1) * $perPage);
- $res = new static();
- $res->page = $page;
- $res->perPage = $perPage;
- $res->pageCount = $pageCount;
- $res->offset = $offset;
- $res->field = $request->input('field');
- $res->keyword = $request->input('keyword');
- $res->startDate = $request->input('start_date');
- $res->endDate = $request->input('end_date');
- $res->sort = $request->input('sort', 1);
- foreach(array_merge($request->route()->parameters(), $request->all()) as $k => $v) {
- if(!property_exists($res, $k)) {
- $res->{$k} = $v;
- }
- }
- unset($page, $perPage, $pageCount, $offset);
- return $res;
- }
- public function __set($name, $value)
- {
- $this->{$name} = $value;
- }
- public function __get($name): mixed
- {
- return ($this->{$name} ?? null);
- }
- public function toResponse($request): JsonResponse
- {
- return response()->json($this);
- }
- }
|