/** * Update a record * * @param Number $id ID of record * @param Request $request Current http request * * @return Response $response Result of action with data (if successful) */ public function putAction($id, Request $request) { $contentType = $request->headers->get('Content-Type'); if (substr(strtolower($contentType), 0, 16) === 'application/json') { return parent::putAction($id, $request); } $record = $this->findRecord($id); $file = $this->saveFile($id, $request->getContent()); $record->getMetadata()->setSize((int) $file->getSize())->setMime($contentType); $this->getModel()->updateRecord($id, $record); // store id of new record so we dont need to reparse body later when needed $request->attributes->set('id', $record->getId()); $response = $this->getResponse(); $response->setStatusCode(Response::HTTP_OK); $routeName = $request->get('_route'); if (substr($routeName, 0, -4) == '.put') { $routeName = substr($routeName, 0, -3) . 'get'; } $response->headers->set('Location', $this->getRouter()->generate($routeName, array('id' => $record->getId()))); return $response; }
/** * Update a record * * @param Number $id ID of record * @param Request $request Current http request * * @return Response $response Result of action with data (if successful) */ public function putAction($id, Request $request) { $contentType = $request->headers->get('Content-Type'); if (substr(strtolower($contentType), 0, 16) === 'application/json') { return parent::putAction($id, $request); } if (0 === strpos($contentType, 'multipart/form-data')) { $request = $this->normalizeRequest($request); } $response = $this->getResponse(); $fileData = $this->validateRequest($request, $response, $request->get('metadata')); $files = $this->fileManager->saveFiles($request, $this->getModel(), $fileData); // store id of new record so we don't need to re-parse body later when needed $request->attributes->set('id', $files[0]); $response->setStatusCode(Response::HTTP_NO_CONTENT); // no service sends Location headers on PUT - /file shouldn't as well return $response; }