/** * {@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); }