getElements() as $element) { $handler = $rsv_form_registry->get($element->getType()); if ($handler === null) { $result->addError($element->getName(), 'handler_missing', 'No handler registered for element type ' . $element->getType()); $this->rollback_all($committed, $submit_id, $data, $result); return $result; } if (!$handler->submit($element, $submit_id, $data->getElements(), $result)) { $this->rollback_all($committed, $submit_id, $data, $result); return $result; } $committed[] = [$handler, $element]; } return $result; } /** * @param array $committed */ private function rollback_all(array $committed, int $submit_id, RsvFormData $data, RsvFormSubmitResult $result): void { foreach (array_reverse($committed) as [$handler, $element]) { try { $handler->rollback($element, $submit_id, $data->getElements(), $result); } catch (\Throwable $e) { Logger::error($e); } } } }