/**
  * {@inheritdoc}
  *
  * @throws AccessException
  * @throws UndefinedOptionsException
  */
 public function configureOptions(OptionsResolver $resolver)
 {
     parent::configureOptions($resolver);
     $choiceNormalizer = function (OptionsResolver $options, $value) {
         return $value === null && $options['autocomplete'] ? [] : $value;
     };
     $emNormalizer = function (Options $options, $em) {
         //support for sonata model type
         if (null === $em && !empty($options['model_manager']) && !empty($options['class'])) {
             $em = $options['model_manager']->getEntityManager($options['class']);
         }
         return $em;
     };
     $queryBuilderNormalizer = function (Options $options, $queryBuilder) {
         if (is_callable($queryBuilder) && !empty($options['em'])) {
             $queryBuilder = call_user_func($queryBuilder, $options['em']->getRepository($options['class']));
         }
         return $queryBuilder;
     };
     // Set the "id_reader" option via the normalizer. This option is not
     // supposed to be set by the user.
     $idReaderNormalizer = function (Options $options, $idReader) {
         if (empty($options['em']) || $idReader instanceof IdReader) {
             return $idReader;
         }
         $hash = CachingFactoryDecorator::generateHash(array($options['em'], $options['class']));
         if (!isset($this->idReaders[$hash])) {
             $classMetadata = $options['em']->getClassMetadata($options['class']);
             $this->idReaders[$hash] = new IdReader($options['em'], $classMetadata);
         }
         return $this->idReaders[$hash];
     };
     //this option is used internally to know when the autocomplete
     //has been initialized in the pre-submit data
     $resolver->setDefault('_autocomplete_submitted', false);
     $resolver->setDefault('em', null);
     $resolver->setDefault('id_reader', null);
     // internal
     $resolver->setAllowedTypes('em', ['null', 'Doctrine\\ORM\\EntityManager']);
     $resolver->setNormalizer('em', $emNormalizer);
     $resolver->setNormalizer('query_builder', $queryBuilderNormalizer);
     $resolver->setNormalizer('id_reader', $idReaderNormalizer);
     $resolver->setNormalizer('choices', $choiceNormalizer);
 }
 /**
  * {@inheritdoc}
  *
  * @throws AccessException
  * @throws UndefinedOptionsException
  */
 public function configureOptions(OptionsResolver $resolver)
 {
     parent::configureOptions($resolver);
     $resolver->setDefault('autocomplete_min_length', 1);
 }