/**
  * {@inheritdoc}
  */
 public function process(FormInterface $model, SymfonyFormInterface $form)
 {
     $result = new FormBuilderResult($model, $form);
     $data = $form->getData();
     foreach ($model->getFormElements() as $element) {
         $options = $element->getOptions();
         $config = $this->registry->getFormElementConfig($element);
         $label = isset($options['label']) ? $options['label'] : sprintf('Element %d', $element->getId());
         $value = $data[$config->getName()];
         $result->addPair($label, $value);
         // Let field modify result if needed
         $field = $this->registry->getFieldBuilder($element->getType());
         $field->processResult($result, $element, $value);
     }
     return $result;
 }
 public function build(FormInterface $form, $data = null)
 {
     $options = ['label' => $form->getLegend(), 'method' => 'POST', 'action' => $this->router->generate($this->route, ['name' => $form->getName()])];
     // Dispatch event to tie in any options
     $event = new FormBuilderFactoryEvent($form, $options);
     $this->dispatcher->dispatch(Events::FORM_BUILD, $event);
     $builder = $this->factory->createNamedBuilder($form->getName(), 'form', $data, $event->getOptions());
     foreach ($form->getFormElements() as $element) {
         $fieldConfig = $this->registry->getFormElementConfig($element);
         // Fix options
         $options = $element->getOptions();
         unset($options['extra']);
         // Set constraints
         $options['constraints'] = $fieldConfig->getConstraints();
         // Add to form
         $builder->add($fieldConfig->getName(), $fieldConfig->getType(), $options);
     }
     return $builder->getForm();
 }