/** * @return ServiceResponse */ public function route(ServiceRequest $serviceRequest) { try { $this->service = $this->findService($serviceRequest); return $this->service->route($serviceRequest); } catch (\Psc\Form\ValidatorException $e) { $this->logError($e, $this->debugLevel, 2); throw HTTPException::BadRequest(sprintf("Beim Validieren der Daten ist ein Fehler aufgetreten. %s", $e->getMessage()), $e, array_merge(array('Content-Type' => 'text/html'), $this->metadataGenerator->validationError($e)->toHeaders())); } catch (\Psc\Form\ValidatorExceptionList $list) { $this->logError($list, $this->debugLevel, 2); throw $this->err->validationResponse($list, $this->request->accepts('application/json') ? ServiceResponse::JSON : ServiceResponse::HTML, $this->metadataGenerator); } }
/** * * @controller-api * @TODO orderby? */ public function getEntities(array $query = array(), $subResource = NULL) { if ($subResource === 'search') { return $this->getEntitySearchPanel($this->getEntityMeta(), $query); } elseif ($subResource !== NULL && array_key_exists($subResource, $this->customActions)) { return $this->callCustomAction($this->customActions[$subResource], array($query)); } if (array_key_exists('autocomplete', $query) && $query['autocomplete'] === 'true') { $entityMeta = $this->getEntityMeta(); $fields = array_keys($entityMeta->getAutoCompleteFields()); $maxResults = isset($query['maxResults']) ? max(1, (int) $query['maxResults']) : NULL; $entities = $this->doAutoCompleteEntities($fields, $query['search'], array_key_exists('filters', $query) ? (array) $query['filters'] : array(), $maxResults); $exporter = new \Psc\CMS\Item\Exporter(); $export = array(); foreach ($entities as $entity) { // @TODO es wäre schön hier spezifizieren zu können welche interfaces exportiert werden müssen // dies muss vom request her passieren $export[] = $exporter->ComboDropBoxable($entityMeta->getAdapter($entity)->getComboDropBoxable()); //$export[] = $exporter->AutoCompletable($entityMeta->getAdapter($entity)->getAutoCompletable()); //$export[] = $exporter->merge($entityMeta->getAdapter($entity), // array('AutoCompletable','Identifyable','TabOpenable') // ); } if (isset($maxResults) && count($export) === $maxResults) { // exceeds $this->metadata = new MetadataGenerator(); $this->metadata->autoCompleteMaxResultsHit($maxResults); } return $export; } else { $entities = $this->findEntitiesFor($query, $this->getDefaultSort(), $subResource); } if ($subResource === NULL) { return Code::castCollection($entities); } elseif ($subResource === 'grid') { return $this->getEntityGrid($this->dc->getEntityMeta($this->getEntityName()), $entities); } else { throw $this->err->invalidArgument(__FUNCTION__, 'subResource', $subResource); } }
/** * Validiert alle Felder im Validator anhand der Daten von FormData und benutzt $err um eine ValidationResponse zu erzeugen (falls es Fehler gab) * * @return FormData (aber validated + cleaned) */ public function validateRequestData(FormData $requestData, Validator $validator, \Psc\Net\ServiceErrorPackage $err) { try { return (object) $validator->validateFields($requestData); // dieser Cast muss angepasst werden wenn FormData mal was andres ist } catch (\Psc\Form\ValidatorExceptionList $e) { throw $err->validationResponse($e); } }