public function extractSubmittedData(FormInterface $form)
{
$data = array(
'submitted_data' => array(
'norm' => $form->getNormData(),
),
'errors' => array(),
);
if ($form->getViewData() !== $form->getNormData()) {
$data['submitted_data']['view'] = $form->getViewData();
}
if ($form->getData() !== $form->getNormData()) {
$data['submitted_data']['model'] = $form->getData();
}
foreach ($form->getErrors() as $error) {
$errorData = array(
'message' => $error->getMessage(),
'origin' => is_object($error->getOrigin())
? spl_object_hash($error->getOrigin())
: null,
'trace' => array(),
);
$cause = $error->getCause();
while (null !== $cause) {
if ($cause instanceof ConstraintViolationInterface) {
$errorData['trace'][] = $cause;
$cause = method_exists($cause, 'getCause') ? $cause->getCause() : null;
continue;
}
if ($cause instanceof \Exception) {
$errorData['trace'][] = $cause;
$cause = $cause->getPrevious();
continue;
}
$errorData['trace'][] = $cause;
break;
}
$data['errors'][] = $errorData;
}
$data['synchronized'] = $form->isSynchronized();
return $data;
}