Example #1
0
 private function executeAction(RecordInterface $record, Version $version)
 {
     $actionId = $this->getActiveMethod()->getAction();
     if (is_int($actionId)) {
         try {
             $context = new FusioContext($this->context->get('fusio.routeId'), $this->app);
             $request = new Request($this->request, $this->uriFragments, $this->getParameters(), $record);
             $response = $this->processor->execute($actionId, $request, $context);
             $statusCode = $response->getStatusCode();
             $headers = $response->getHeaders();
             if (!empty($statusCode)) {
                 $this->setResponseCode($statusCode);
             }
             if (!empty($headers)) {
                 foreach ($headers as $name => $value) {
                     $this->setHeader($name, $value);
                 }
             }
             return $response->getBody();
         } catch (\Exception $e) {
             $this->apiLogger->appendError($this->logId, $e);
             throw $e;
         }
     } else {
         throw new StatusCode\ServiceUnavailableException('No action provided');
     }
 }