/**
  * {@inheritdoc}
  */
 public function configure($name, array $options, array $metadata, FormConfigInterface $parentConfig)
 {
     // The implementation uses a FormTypeGuesserInterface instance in order
     // to guess the "required" value from different sources (PHPdoc,
     // validation or doctrine metadata, etc.)
     $guessed = $this->guesser->guessRequired($parentConfig->getDataClass(), $name);
     if (null !== $guessed) {
         $options['required'] = $guessed->getValue();
     }
     return $options;
 }
 /**
  * {@inheritdoc}
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $entity = $options['entity'];
     $view = $options['view'];
     $entityConfig = $this->configurator->getEntityConfiguration($entity);
     $entityProperties = $entityConfig[$view]['fields'];
     foreach ($entityProperties as $name => $metadata) {
         $formFieldOptions = $metadata['type_options'];
         if ('association' === $metadata['type']) {
             if ($metadata['associationType'] & ClassMetadata::TO_MANY) {
                 $formFieldOptions['attr']['multiple'] = true;
             }
             // supported associations are displayed using advanced JavaScript widgets
             $formFieldOptions['attr']['data-widget'] = 'select2';
         }
         if ('collection' === $metadata['fieldType']) {
             if (!isset($formFieldOptions['allow_add'])) {
                 $formFieldOptions['allow_add'] = true;
             }
             if (!isset($formFieldOptions['allow_delete'])) {
                 $formFieldOptions['allow_delete'] = true;
             }
             // The "delete_empty" option exists as of Sf >= 2.5
             if (class_exists('Symfony\\Component\\Form\\FormErrorIterator')) {
                 if (!isset($formFieldOptions['delete_empty'])) {
                     $formFieldOptions['delete_empty'] = true;
                 }
             }
         } elseif ('checkbox' === $metadata['fieldType'] && !isset($formFieldOptions['required'])) {
             $formFieldOptions['required'] = false;
         }
         if (!isset($formFieldOptions['required'])) {
             if (null !== ($guessRequired = $this->guesser->guessRequired($builder->getOption('data_class'), $name))) {
                 $formFieldOptions['required'] = $guessRequired->getValue();
             }
         }
         // Configure "placeholder" option for entity fields
         if ('association' === $metadata['type'] && $metadata['associationType'] & ClassMetadata::TO_ONE && !isset($formFieldOptions[$placeHolderOptionName = $this->getPlaceholderOptionName()]) && false === $formFieldOptions['required']) {
             $formFieldOptions[$placeHolderOptionName] = 'form.label.empty_value';
         }
         $formFieldOptions['attr']['field_type'] = $metadata['fieldType'];
         $formFieldOptions['attr']['field_css_class'] = $metadata['class'];
         $formFieldOptions['attr']['field_help'] = $metadata['help'];
         $formFieldType = $this->useLegacyFormComponent() ? $metadata['fieldType'] : $this->getFormTypeFqcn($metadata['fieldType']);
         $builder->add($name, $formFieldType, $formFieldOptions);
     }
 }
 /**
  * {@inheritdoc}
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $entity = $options['entity'];
     $view = $options['view'];
     $entityConfig = $this->configurator->getEntityConfiguration($entity);
     $entityProperties = $entityConfig[$view]['fields'];
     foreach ($entityProperties as $name => $metadata) {
         $formFieldOptions = $metadata['type_options'];
         if ('association' === $metadata['type']) {
             $toManyAssociations = array(ClassMetadata::ONE_TO_MANY, ClassMetadata::MANY_TO_MANY);
             if (in_array($metadata['associationType'], $toManyAssociations)) {
                 $formFieldOptions['attr']['multiple'] = true;
             }
             // supported associations are displayed using advanced JavaScript widgets
             $formFieldOptions['attr']['data-widget'] = 'select2';
         }
         if ('collection' === $metadata['fieldType']) {
             if (!isset($formFieldOptions['allow_add'])) {
                 $formFieldOptions['allow_add'] = true;
             }
             if (!isset($formFieldOptions['allow_delete'])) {
                 $formFieldOptions['allow_delete'] = true;
             }
             if (version_compare(Kernel::VERSION, '2.5.0', '>=')) {
                 if (!isset($formFieldOptions['delete_empty'])) {
                     $formFieldOptions['delete_empty'] = true;
                 }
             }
         } elseif ('checkbox' === $metadata['fieldType'] && !isset($formFieldOptions['required'])) {
             $formFieldOptions['required'] = false;
         }
         if (!isset($formFieldOptions['required'])) {
             if (null !== ($guessRequired = $this->guesser->guessRequired($builder->getOption('data_class'), $name))) {
                 $formFieldOptions['required'] = $guessRequired->getValue();
             }
         }
         $formFieldOptions['attr']['field_type'] = $metadata['fieldType'];
         $formFieldOptions['attr']['field_css_class'] = $metadata['class'];
         $formFieldOptions['attr']['field_help'] = $metadata['help'];
         $formFieldType = $this->useLegacyFormComponent() ? $metadata['fieldType'] : $this->getFormTypeFqcn($metadata['fieldType']);
         $builder->add($name, $formFieldType, $formFieldOptions);
     }
 }