12
12
namespace Symfony \Bridge \Doctrine \Form \ChoiceList ;
13
13
14
14
use Doctrine \Common \Persistence \ObjectManager ;
15
+ use Symfony \Component \Form \ChoiceList \ArrayChoiceList ;
15
16
use Symfony \Component \Form \ChoiceList \ChoiceListInterface ;
16
17
use Symfony \Component \Form \ChoiceList \Factory \ChoiceListFactoryInterface ;
17
18
use Symfony \Component \Form \ChoiceList \Loader \ChoiceLoaderInterface ;
@@ -60,20 +61,30 @@ class DoctrineChoiceLoader implements ChoiceLoaderInterface
60
61
* passed which optimizes the object loading for one of the Doctrine
61
62
* mapper implementations.
62
63
*
63
- * @param ChoiceListFactoryInterface $factory The factory for creating
64
- * the loaded choice list
65
64
* @param ObjectManager $manager The object manager
66
65
* @param string $class The class name of the
67
66
* loaded objects
68
67
* @param IdReader $idReader The reader for the object
69
68
* IDs.
69
+ * @param ChoiceListFactoryInterface $factory The factory for creating
70
+ * the loaded choice list
70
71
* @param null|EntityLoaderInterface $objectLoader The objects loader
71
72
*/
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 )
73
74
{
75
+ // BC to be removed 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 as changed form first to last argument as of 3.1
80
+ $ this ->factory = $ manager ;
81
+ $ manager = $ class ;
82
+ $ class = $ idReader ;
83
+ $ objectLoader = $ factory ;
84
+ }
85
+
74
86
$ classMetadata = $ manager ->getClassMetadata ($ class );
75
87
76
- $ this ->factory = $ factory ;
77
88
$ this ->manager = $ manager ;
78
89
$ this ->class = $ classMetadata ->getName ();
79
90
$ this ->idReader = $ idReader ?: new IdReader ($ manager , $ classMetadata );
@@ -93,9 +104,7 @@ public function loadChoiceList($value = null)
93
104
? $ this ->objectLoader ->getEntities ()
94
105
: $ this ->manager ->getRepository ($ this ->class )->findAll ();
95
106
96
- $ this ->choiceList = $ this ->factory ->createListFromChoices ($ objects , $ value );
97
-
98
- return $ this ->choiceList ;
107
+ return $ this ->choiceList = new ArrayChoiceList ($ objects , $ value );
99
108
}
100
109
101
110
/**
@@ -146,7 +155,7 @@ public function loadChoicesForValues(array $values, $value = null)
146
155
147
156
// Optimize performance in case we have an object loader and
148
157
// a single-field identifier
149
- $ optimize = null === $ value || is_array ($ value ) && $ value [ 0 ] === $ this -> idReader ;
158
+ $ optimize = null === $ value || is_array ($ value ) && $ this -> idReader === $ value [ 0 ] ;
150
159
151
160
if ($ optimize && !$ this ->choiceList && $ this ->objectLoader && $ this ->idReader ->isSingleId ()) {
152
161
$ unorderedObjects = $ this ->objectLoader ->getEntitiesByIds ($ this ->idReader ->getIdField (), $ values );
0 commit comments