%PDF- %PDF-
Direktori : /home/emtnaeewxm/www/vendor/symfony/symfony/src/Symfony/Bridge/Doctrine/Form/Type/ |
Current File : /home/emtnaeewxm/www/vendor/symfony/symfony/src/Symfony/Bridge/Doctrine/Form/Type/EntityType.php |
<?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Bridge\Doctrine\Form\Type; use Doctrine\Common\Persistence\ObjectManager as LegacyObjectManager; use Doctrine\ORM\Query\Parameter; use Doctrine\ORM\QueryBuilder; use Symfony\Bridge\Doctrine\Form\ChoiceList\ORMQueryBuilderLoader; use Symfony\Component\Form\Exception\UnexpectedTypeException; use Symfony\Component\OptionsResolver\Options; use Symfony\Component\OptionsResolver\OptionsResolver; class EntityType extends DoctrineType { public function configureOptions(OptionsResolver $resolver) { parent::configureOptions($resolver); // Invoke the query builder closure so that we can cache choice lists // for equal query builders $queryBuilderNormalizer = function (Options $options, $queryBuilder) { if (\is_callable($queryBuilder)) { $queryBuilder = \call_user_func($queryBuilder, $options['em']->getRepository($options['class'])); if (null !== $queryBuilder && !$queryBuilder instanceof QueryBuilder) { throw new UnexpectedTypeException($queryBuilder, 'Doctrine\ORM\QueryBuilder'); } } return $queryBuilder; }; $resolver->setNormalizer('query_builder', $queryBuilderNormalizer); $resolver->setAllowedTypes('query_builder', ['null', 'callable', 'Doctrine\ORM\QueryBuilder']); } /** * Return the default loader object. * * @param QueryBuilder $queryBuilder * @param string $class * * @return ORMQueryBuilderLoader */ public function getLoader(LegacyObjectManager $manager, $queryBuilder, $class) { return new ORMQueryBuilderLoader($queryBuilder); } /** * {@inheritdoc} */ public function getBlockPrefix() { return 'entity'; } /** * We consider two query builders with an equal SQL string and * equal parameters to be equal. * * @param QueryBuilder $queryBuilder * * @return array * * @internal This method is public to be usable as callback. It should not * be used in user code. */ public function getQueryBuilderPartsForCachingHash($queryBuilder) { return [ $queryBuilder->getQuery()->getSQL(), array_map([$this, 'parameterToArray'], $queryBuilder->getParameters()->toArray()), ]; } /** * Converts a query parameter to an array. * * @return array The array representation of the parameter */ private function parameterToArray(Parameter $parameter) { return [$parameter->getName(), $parameter->getType(), $parameter->getValue()]; } }