From e0a1294a44ca4ba902af6af4b4ddfc0dabf8a30d Mon Sep 17 00:00:00 2001 From: Thomas Lallement Date: Fri, 20 Mar 2015 10:13:42 +0100 Subject: [PATCH] [Form] Add flexibility for EntityType --- .../Form/ChoiceList/ORMQueryBuilderLoader.php | 12 ++++++++++-- .../Doctrine/Tests/Form/Type/EntityTypeTest.php | 13 +++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Bridge/Doctrine/Form/ChoiceList/ORMQueryBuilderLoader.php b/src/Symfony/Bridge/Doctrine/Form/ChoiceList/ORMQueryBuilderLoader.php index 6e16240d29..8796d5e072 100644 --- a/src/Symfony/Bridge/Doctrine/Form/ChoiceList/ORMQueryBuilderLoader.php +++ b/src/Symfony/Bridge/Doctrine/Form/ChoiceList/ORMQueryBuilderLoader.php @@ -30,7 +30,7 @@ class ORMQueryBuilderLoader implements EntityLoaderInterface * * This property should only be accessed through queryBuilder. * - * @var QueryBuilder + * @var QueryBuilder|null */ private $queryBuilder; @@ -68,7 +68,7 @@ class ORMQueryBuilderLoader implements EntityLoaderInterface $queryBuilder = $queryBuilder($manager->getRepository($class)); - if (!$queryBuilder instanceof QueryBuilder) { + if (null !== $queryBuilder && !$queryBuilder instanceof QueryBuilder) { throw new UnexpectedTypeException($queryBuilder, 'Doctrine\ORM\QueryBuilder'); } } @@ -81,6 +81,10 @@ class ORMQueryBuilderLoader implements EntityLoaderInterface */ public function getEntities() { + if (null === $this->queryBuilder) { + return array(); + } + return $this->queryBuilder->getQuery()->execute(); } @@ -89,6 +93,10 @@ class ORMQueryBuilderLoader implements EntityLoaderInterface */ 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 3223996b90..307b68fd32 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Form/Type/EntityTypeTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Form/Type/EntityTypeTest.php @@ -212,6 +212,19 @@ class EntityTypeTest extends TypeTestCase $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() {