get('page') ?? 1; $perPage = $request->get('per_page') ?? 10; $query = $this->model->query(); if ($page > 1) { $query->skip(($page - 1) * $perPage)->take($perPage); } else { $query->take($perPage); } $expand = $this->expand(); $expandParams = explode( ",", $request->get('expand') ?? ""); $finalExpand = array_intersect($expandParams, $expand); if ($finalExpand) { $res = $query->get()->load($finalExpand)->toArray(); } else { $res = $query->get()->toArray(); } $this->renderApi($res); } #[NoReturn] public function actionView($id): void { $expand = $this->expand(); $request = new Request(); $expandParams = explode( ",", $request->get('expand') ?? ""); $model = $this->model->where("id", $id)->first(); $finalExpand = array_intersect($expandParams, $expand); if ($finalExpand){ $model->load($finalExpand); } $res = []; if ($model){ $res = $model->toArray(); } $this->renderApi($res); } #[NoReturn] public function actionDelete($id): void { $model = $this->model->where("id", $id)->first(); $res = []; if ($model){ $res = $model->toArray(); } $model->delete(); $this->renderApi($res); } #[NoReturn] public function actionStore(): void { $request = new Request(); $data = $request->post(); foreach ($this->model->getFillable() as $item){ $this->model->{$item} = $data[$item] ?? null; } $this->model->save(); $this->renderApi($this->model->toArray()); } #[NoReturn] public function actionEdit(int $id): void { $request = new Request(); $data = $request->post(); $model = $this->model->where('id', $id)->first(); foreach ($model->getFillable() as $item){ $model->{$item} = $data[$item] ?? null; } $model->save(); $this->renderApi($model->toArray()); } #[NoReturn] protected function renderApi(array $data): void { header("Content-Type: application/json"); echo json_encode($data); exit(); } }