示例#1
0
 /**
  * {@inheritDoc}
  */
 public function processRequest(Rest\RestRequest $request)
 {
     switch ($request->getMethod()) {
         case 'GET':
             if (true === $request->hasIdentifier()) {
                 if (false === $request->isRelationship() && false === $request->hasFilters()) {
                     return $this->findRecord($request->getEntityType(), $request->getIdentifier());
                 }
                 if (true === $request->isRelationshipRetrieve()) {
                     return $this->findRelationship($request->getEntityType(), $request->getIdentifier(), $request->getRelationshipFieldKey());
                 }
                 throw AdapterException::badRequest('No GET handler found.');
             } else {
                 if (true === $request->isAutocomplete()) {
                     // @todo Eventually add pagination (limit/skip)
                     return $this->autocomplete($request->getEntityType(), $request->getAutocompleteKey(), $request->getAutocompleteValue());
                 }
                 return $this->findAll($request->getEntityType(), []);
                 //, $request->getPagination(), $request->getFieldset(), $request->getInclusions(), $request->getSorting());
             }
             throw AdapterException::badRequest('No GET handler found.');
         case 'POST':
             // @todo Must validate JSON content type
             if (false === $request->hasIdentifier()) {
                 if (true === $request->hasPayload()) {
                     return $this->createRecord($request->getEntityType(), $request->getPayload(), $request->getFieldset(), $request->getInclusions());
                 }
                 throw AdapterException::requestPayloadNotFound('Unable to create new entity.');
             }
             throw AdapterException::badRequest('Creating a new record while providing an id is not supported.');
         case 'PATCH':
             // @todo Must validate JSON content type
             if (false === $request->hasIdentifier()) {
                 throw AdapterException::badRequest('No identifier found. You must specify an ID in the URL.');
             }
             if (false === $request->hasPayload()) {
                 throw AdapterException::requestPayloadNotFound('Unable to update entity.');
             }
             return $this->updateRecord($request->getEntityType(), $request->getIdentifier(), $request->getPayload(), $request->getFieldset(), $request->getInclusions());
         case 'DELETE':
             if (false === $request->hasIdentifier()) {
                 throw AdapterException::badRequest('No identifier found. You must specify an ID in the URL.');
             }
             return $this->deleteRecord($request->getEntityType(), $request->getIdentifier());
             throw AdapterException::badRequest('No DELETE request handler found.');
         default:
             throw AdapterException::badRequest(sprintf('The request method "%s" is not supported.', $request->getMethod()));
     }
 }