Exemple #1
0
 /**
  * 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]);
             }
         }
     }
 }