1212namespace Symfony \Bridge \Doctrine \Form \ChoiceList ;
1313
1414use Doctrine \Common \Persistence \ObjectManager ;
15+ use Symfony \Component \Form \ChoiceList \ArrayChoiceList ;
1516use Symfony \Component \Form \ChoiceList \ChoiceListInterface ;
1617use Symfony \Component \Form \ChoiceList \Factory \ChoiceListFactoryInterface ;
1718use Symfony \Component \Form \ChoiceList \Loader \ChoiceLoaderInterface ;
@@ -60,20 +61,31 @@ class DoctrineChoiceLoader implements ChoiceLoaderInterface
6061 * passed which optimizes the object loading for one of the Doctrine
6162 * mapper implementations.
6263 *
63- * @param ChoiceListFactoryInterface $factory The factory for creating
64- * the loaded choice list
6564 * @param ObjectManager $manager The object manager
6665 * @param string $class The class name of the
6766 * loaded objects
6867 * @param IdReader $idReader The reader for the object
6968 * IDs.
69+ * @param ChoiceListFactoryInterface $factory The factory for creating
70+ * the loaded choice list
7071 * @param null|EntityLoaderInterface $objectLoader The objects loader
7172 */
72- public function __construct (ChoiceListFactoryInterface $ factory , ObjectManager $ manager , $ class , IdReader $ idReader = null , EntityLoaderInterface $ objectLoader = null )
73+ public function __construct ($ manager , $ class , $ idReader = null , $ objectLoader = null , $ factory = null )
7374 {
75+ // BC to be removed and replace with type hints in 4.0
76+ if ($ manager instanceof ChoiceListFactoryInterface) {
77+ @trigger_error (sprintf ('Passing a ChoiceListFactoryInterface to %s is deprecated since version 3.1 and will no longer be supported in 4.0. You should either call "%s::loadChoiceList" or override it to return a ChoiceListInterface. ' , __CLASS__ , __CLASS__ ));
78+
79+ // Provide a BC layer since $factory has changed
80+ // form first to last argument as of 3.1
81+ $ this ->factory = $ manager ;
82+ $ manager = $ class ;
83+ $ class = $ idReader ;
84+ $ objectLoader = $ factory ;
85+ }
86+
7487 $ classMetadata = $ manager ->getClassMetadata ($ class );
7588
76- $ this ->factory = $ factory ;
7789 $ this ->manager = $ manager ;
7890 $ this ->class = $ classMetadata ->getName ();
7991 $ this ->idReader = $ idReader ?: new IdReader ($ manager , $ classMetadata );
@@ -93,9 +105,7 @@ public function loadChoiceList($value = null)
93105 ? $ this ->objectLoader ->getEntities ()
94106 : $ this ->manager ->getRepository ($ this ->class )->findAll ();
95107
96- $ this ->choiceList = $ this ->factory ->createListFromChoices ($ objects , $ value );
97-
98- return $ this ->choiceList ;
108+ return $ this ->choiceList = new ArrayChoiceList ($ objects , $ value );
99109 }
100110
101111 /**
@@ -146,7 +156,7 @@ public function loadChoicesForValues(array $values, $value = null)
146156
147157 // Optimize performance in case we have an object loader and
148158 // a single-field identifier
149- $ optimize = null === $ value || is_array ($ value ) && $ value [ 0 ] === $ this -> idReader ;
159+ $ optimize = null === $ value || is_array ($ value ) && $ this -> idReader === $ value [ 0 ] ;
150160
151161 if ($ optimize && !$ this ->choiceList && $ this ->objectLoader && $ this ->idReader ->isSingleId ()) {
152162 $ unorderedObjects = $ this ->objectLoader ->getEntitiesByIds ($ this ->idReader ->getIdField (), $ values );
0 commit comments