diff --git a/src/Symfony/Bridge/Doctrine/Form/ChoiceList/ORMQueryBuilderLoader.php b/src/Symfony/Bridge/Doctrine/Form/ChoiceList/ORMQueryBuilderLoader.php index 872e77affe0b7..1b45e4e7d909e 100644 --- a/src/Symfony/Bridge/Doctrine/Form/ChoiceList/ORMQueryBuilderLoader.php +++ b/src/Symfony/Bridge/Doctrine/Form/ChoiceList/ORMQueryBuilderLoader.php @@ -27,7 +27,7 @@ class ORMQueryBuilderLoader implements EntityLoaderInterface * * This property should only be accessed through queryBuilder. * - * @var QueryBuilder + * @var QueryBuilder|null */ private $queryBuilder; @@ -55,7 +55,7 @@ public function __construct($queryBuilder, $manager = null, $class = null) $queryBuilder = $queryBuilder($manager->getRepository($class)); - if (!$queryBuilder instanceof QueryBuilder) { + if (null !== $queryBuilder && !$queryBuilder instanceof QueryBuilder) { throw new UnexpectedTypeException($queryBuilder, 'Doctrine\ORM\QueryBuilder'); } } @@ -68,6 +68,10 @@ public function __construct($queryBuilder, $manager = null, $class = null) */ public function getEntities() { + if (null === $this->queryBuilder) { + return array(); + } + return $this->queryBuilder->getQuery()->execute(); } @@ -76,6 +80,10 @@ public function getEntities() */ public function getEntitiesByIds($identifier, array $values) { + if (null === $this->queryBuilder) { + return array(); + } + $qb = clone ($this->queryBuilder); $alias = current($qb->getRootAliases()); $parameter = 'ORMQueryBuilderLoader_getEntitiesByIds_'.$identifier; diff --git a/src/Symfony/Bridge/Doctrine/Tests/Form/Type/EntityTypeTest.php b/src/Symfony/Bridge/Doctrine/Tests/Form/Type/EntityTypeTest.php index 25afbed492150..8827c14b65bcc 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Form/Type/EntityTypeTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Form/Type/EntityTypeTest.php @@ -196,6 +196,19 @@ public function testConfigureQueryBuilderWithClosureReturningNonQueryBuilder() $field->submit('2'); } + + public function testConfigureQueryBuilderWithClosureReturningNull() + { + $field = $this->factory->createNamed('name', 'entity', null, array( + 'em' => 'default', + 'class' => self::SINGLE_IDENT_CLASS, + 'query_builder' => function () { + return null; + }, + )); + + $this->assertEquals(array(), $field->createView()->vars['choices']); + } public function testSetDataSingleNull() {
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: