/** * PUT /{item}/{id} <- UPDATE an {item} with ID {id} using POST/PUT params * @param Request $request * @param array $params * @return Reply */ public function Put(Request $request, $params = []) { if (empty($params)) { return new Reply(422, ['error' => 'You must specify an ID in order to update.']); } else { if ($this->authUserFilter && !isset($this->authUser)) { return new Reply(403, ['error' => 'Must be logged in to access this resource.']); } $id = $params[0]; /** @var \Fluxoft\Rebar\Db\Model $update */ $update = $this->mapper->GetOneById($id); if ($this->authUserFilter) { if ($update->{$this->authUserIDProperty} !== $this->authUser->GetID()) { $update = false; } } if (!isset($update)) { return new Reply(404, ['error' => 'The object to be updated was not found.']); } else { $errors = []; $model = $this->getPutData($request); foreach ($model as $key => $value) { try { $update->{$key} = $value; } catch (\InvalidArgumentException $e) { $errors[] = $e->getMessage(); } } if (empty($errors)) { $this->mapper->Save($update); return new Reply(200, $update); } else { return new Reply(422, ['errors' => $errors]); } } } }