public function put($id)
    {
        $request = $this->getDI()->get('request');
        // supply everything the request object could possibly need to fullfill the request
        $put = $request->getJson($this->getControllerName('singular'), $this->model);

        if (!$put) {
            throw new HTTPException('There was an error updating an existing record.', 500, [
                'dev' => 'Invalid data posted to the server',
                'code' => '568136818916816'
            ]);
        }

        if(method_exists($this->model, "getBlockColumns")) {
            // filter out any block columns from the posted data
            $blockFields = $this->model->getBlockColumns();
            foreach ($blockFields as $key => $value) {
                unset($put->$value);
            }
        }

        $put = $this->beforeSave($put, $id);
        $id = $this->entity->save($put, $id);
        $this->afterSave($put, $id);

        // reload record so we can return it
        $result = $this->entity->findFirst($id);

        if ($result->countResults() == 0) {
            // This is bad. Throw a 500. Responses should always be objects.
            throw new HTTPException('There was an error retrieving the just updated record.', 500, [
                'dev' => 'The resource you requested is not available after it was just updated',
                'code' => '1238510381861'
            ]);
        } else {
            return $result;
        }
    }