1919use Symfony \Bridge \Doctrine \Form \EventListener \MergeDoctrineCollectionListener ;
2020use Symfony \Bridge \Doctrine \Form \DataTransformer \CollectionToArrayTransformer ;
2121use Symfony \Component \Form \AbstractType ;
22+ use Symfony \Component \Form \Options ;
2223
2324abstract class DoctrineType extends AbstractType
2425{
@@ -42,37 +43,43 @@ public function buildForm(FormBuilder $builder, array $options)
4243 }
4344 }
4445
45- public function getDefaultOptions (array $ options )
46+ public function getDefaultOptions ()
4647 {
47- $ defaultOptions = array (
48- 'em ' => null ,
49- 'class ' => null ,
50- 'property ' => null ,
51- 'query_builder ' => null ,
52- 'loader ' => null ,
53- 'group_by ' => null ,
54- );
48+ $ registry = $ this ->registry ;
49+ $ type = $ this ;
5550
56- $ options = array_replace ($ defaultOptions , $ options );
51+ $ loader = function (Options $ options ) use ($ type , $ registry ) {
52+ if (null !== $ options ['query_builder ' ]) {
53+ $ manager = $ registry ->getManager ($ options ['em ' ]);
5754
58- if (!isset ($ options ['choice_list ' ])) {
59- $ manager = $ this ->registry ->getManager ($ options ['em ' ]);
60-
61- if (isset ($ options ['query_builder ' ])) {
62- $ options ['loader ' ] = $ this ->getLoader ($ manager , $ options );
55+ return $ type ->getLoader ($ manager , $ options ['query_builder ' ], $ options ['class ' ]);
6356 }
6457
65- $ defaultOptions ['choice_list ' ] = new EntityChoiceList (
58+ return null ;
59+ };
60+
61+ $ choiceList = function (Options $ options ) use ($ registry ) {
62+ $ manager = $ registry ->getManager ($ options ['em ' ]);
63+
64+ return new EntityChoiceList (
6665 $ manager ,
6766 $ options ['class ' ],
6867 $ options ['property ' ],
6968 $ options ['loader ' ],
7069 $ options ['choices ' ],
7170 $ options ['group_by ' ]
7271 );
73- }
72+ };
7473
75- return $ defaultOptions ;
74+ return array (
75+ 'em ' => null ,
76+ 'class ' => null ,
77+ 'property ' => null ,
78+ 'query_builder ' => null ,
79+ 'loader ' => $ loader ,
80+ 'choice_list ' => $ choiceList ,
81+ 'group_by ' => null ,
82+ );
7683 }
7784
7885 /**
@@ -82,7 +89,7 @@ public function getDefaultOptions(array $options)
8289 * @param array $options
8390 * @return EntityLoaderInterface
8491 */
85- abstract protected function getLoader (ObjectManager $ manager , array $ options );
92+ abstract public function getLoader (ObjectManager $ manager , $ queryBuilder , $ class );
8693
8794 public function getParent (array $ options )
8895 {
0 commit comments