Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 43d2a0f

Browse files
committed
[DoctrineBridge][Form] Fix BC break in DoctrineType
1 parent e60f715 commit 43d2a0f

File tree

2 files changed

+26
-8
lines changed

2 files changed

+26
-8
lines changed

src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
use Doctrine\Common\Persistence\ManagerRegistry;
1515
use Doctrine\Common\Persistence\ObjectManager;
16-
use Doctrine\ORM\QueryBuilder;
1716
use Symfony\Bridge\Doctrine\Form\ChoiceList\DoctrineChoiceLoader;
1817
use Symfony\Bridge\Doctrine\Form\ChoiceList\EntityLoaderInterface;
1918
use Symfony\Bridge\Doctrine\Form\ChoiceList\IdReader;
@@ -25,7 +24,6 @@
2524
use Symfony\Component\Form\ChoiceList\Factory\DefaultChoiceListFactory;
2625
use Symfony\Component\Form\ChoiceList\Factory\PropertyAccessDecorator;
2726
use Symfony\Component\Form\Exception\RuntimeException;
28-
use Symfony\Component\Form\Exception\UnexpectedTypeException;
2927
use Symfony\Component\Form\FormBuilderInterface;
3028
use Symfony\Component\OptionsResolver\Options;
3129
use Symfony\Component\OptionsResolver\OptionsResolver;
@@ -124,7 +122,7 @@ public function configureOptions(OptionsResolver $resolver)
124122
if (null === $options['choices']) {
125123
// We consider two query builders with an equal SQL string and
126124
// equal parameters to be equal
127-
$qbParts = $options['query_builder']
125+
$qbParts = $options['query_builder'] instanceof \Doctrine\ORM\QueryBuilder
128126
? array(
129127
$options['query_builder']->getQuery()->getSQL(),
130128
$options['query_builder']->getParameters()->toArray(),
@@ -240,10 +238,6 @@ public function configureOptions(OptionsResolver $resolver)
240238
$queryBuilderNormalizer = function (Options $options, $queryBuilder) {
241239
if (is_callable($queryBuilder)) {
242240
$queryBuilder = call_user_func($queryBuilder, $options['em']->getRepository($options['class']));
243-
244-
if (!$queryBuilder instanceof QueryBuilder) {
245-
throw new UnexpectedTypeException($queryBuilder, 'Doctrine\ORM\QueryBuilder');
246-
}
247241
}
248242

249243
return $queryBuilder;
@@ -305,7 +299,6 @@ public function configureOptions(OptionsResolver $resolver)
305299

306300
$resolver->setAllowedTypes('em', array('null', 'string', 'Doctrine\Common\Persistence\ObjectManager'));
307301
$resolver->setAllowedTypes('loader', array('null', 'Symfony\Bridge\Doctrine\Form\ChoiceList\EntityLoaderInterface'));
308-
$resolver->setAllowedTypes('query_builder', array('null', 'callable', 'Doctrine\ORM\QueryBuilder'));
309302
}
310303

311304
/**

src/Symfony/Bridge/Doctrine/Form/Type/EntityType.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,34 @@
1414
use Doctrine\Common\Persistence\ObjectManager;
1515
use Doctrine\ORM\QueryBuilder;
1616
use Symfony\Bridge\Doctrine\Form\ChoiceList\ORMQueryBuilderLoader;
17+
use Symfony\Component\Form\Exception\UnexpectedTypeException;
18+
use Symfony\Component\OptionsResolver\Options;
19+
use Symfony\Component\OptionsResolver\OptionsResolver;
1720

1821
class EntityType extends DoctrineType
1922
{
23+
public function configureOptions(OptionsResolver $resolver)
24+
{
25+
parent::configureOptions($resolver);
26+
27+
// Invoke the query builder closure so that we can cache choice lists
28+
// for equal query builders
29+
$queryBuilderNormalizer = function (Options $options, $queryBuilder) {
30+
if (is_callable($queryBuilder)) {
31+
$queryBuilder = call_user_func($queryBuilder, $options['em']->getRepository($options['class']));
32+
33+
if (!$queryBuilder instanceof QueryBuilder) {
34+
throw new UnexpectedTypeException($queryBuilder, 'Doctrine\ORM\QueryBuilder');
35+
}
36+
}
37+
38+
return $queryBuilder;
39+
};
40+
41+
$resolver->setNormalizer('query_builder', $queryBuilderNormalizer);
42+
$resolver->setAllowedTypes('query_builder', array('null', 'callable', 'Doctrine\ORM\QueryBuilder'));
43+
}
44+
2045
/**
2146
* Return the default loader object.
2247
*

0 commit comments

Comments
 (0)