@@ -146,50 +146,19 @@ public function register(Container $container)
146146
147147 $ chain = $ container ['orm.mapping_driver_chain.locator ' ]($ name );
148148
149- foreach ((array ) $ options ['mappings ' ] as $ entity ) {
150- if (!is_array ($ entity )) {
149+ foreach ((array ) $ options ['mappings ' ] as $ mappingOptions ) {
150+ if (!is_array ($ mappingOptions )) {
151151 throw new \InvalidArgumentException (
152152 "The 'orm.em.options' option 'mappings' should be an array of arrays. "
153153 );
154154 }
155155
156- if (isset ($ entity ['alias ' ])) {
157- $ config ->addEntityNamespace ($ entity ['alias ' ], $ entity ['namespace ' ]);
156+ if (isset ($ mappingOptions ['alias ' ])) {
157+ $ config ->addEntityNamespace ($ mappingOptions ['alias ' ], $ mappingOptions ['namespace ' ]);
158158 }
159159
160- switch ($ entity ['type ' ]) {
161- case 'annotation ' :
162- $ useSimpleAnnotationReader =
163- isset ($ entity ['use_simple_annotation_reader ' ])
164- ? $ entity ['use_simple_annotation_reader ' ]
165- : true ;
166- $ driver = $ config ->newDefaultAnnotationDriver ((array ) $ entity ['path ' ], $ useSimpleAnnotationReader );
167- $ chain ->addDriver ($ driver , $ entity ['namespace ' ]);
168- break ;
169- case 'yml ' :
170- $ driver = new YamlDriver ($ entity ['path ' ]);
171- $ chain ->addDriver ($ driver , $ entity ['namespace ' ]);
172- break ;
173- case 'simple_yml ' :
174- $ driver = new SimplifiedYamlDriver (array ($ entity ['path ' ] => $ entity ['namespace ' ]));
175- $ chain ->addDriver ($ driver , $ entity ['namespace ' ]);
176- break ;
177- case 'xml ' :
178- $ driver = new XmlDriver ($ entity ['path ' ]);
179- $ chain ->addDriver ($ driver , $ entity ['namespace ' ]);
180- break ;
181- case 'simple_xml ' :
182- $ driver = new SimplifiedXmlDriver (array ($ entity ['path ' ] => $ entity ['namespace ' ]));
183- $ chain ->addDriver ($ driver , $ entity ['namespace ' ]);
184- break ;
185- case 'php ' :
186- $ driver = new StaticPHPDriver ($ entity ['path ' ]);
187- $ chain ->addDriver ($ driver , $ entity ['namespace ' ]);
188- break ;
189- default :
190- throw new \InvalidArgumentException (sprintf ('"%s" is not a recognized driver ' , $ entity ['type ' ]));
191- break ;
192- }
160+ $ driver = $ container ['orm.mapping.factory ' ]($ mappingOptions ['type ' ], $ config , $ mappingOptions );
161+ $ chain ->addDriver ($ driver , $ mappingOptions ['namespace ' ]);
193162 }
194163 $ config ->setMetadataDriverImpl ($ chain );
195164
@@ -207,6 +176,43 @@ public function register(Container $container)
207176 return $ configs ;
208177 };
209178
179+ $ container ['orm.mapping.factory.annotation ' ] = $ container ->protect (function (Configuration $ config , $ mappingOptions ) {
180+ $ useSimpleAnnotationReader =
181+ isset ($ mappingOptions ['use_simple_annotation_reader ' ])
182+ ? $ mappingOptions ['use_simple_annotation_reader ' ]
183+ : true ;
184+ return $ config ->newDefaultAnnotationDriver ((array ) $ mappingOptions ['path ' ], $ useSimpleAnnotationReader );
185+ });
186+
187+ $ container ['orm.mapping.factory.yml ' ] = $ container ->protect (function (Configuration $ config , $ mappingOptions ) {
188+ return new YamlDriver ($ mappingOptions ['path ' ]);
189+ });
190+
191+ $ container ['orm.mapping.factory.simple_yml ' ] = $ container ->protect (function (Configuration $ config , $ mappingOptions ) {
192+ return new SimplifiedYamlDriver (array ($ mappingOptions ['path ' ] => $ mappingOptions ['namespace ' ]));
193+ });
194+
195+ $ container ['orm.mapping.factory.xml ' ] = $ container ->protect (function (Configuration $ config , $ mappingOptions ) {
196+ return new XmlDriver ($ mappingOptions ['path ' ]);
197+ });
198+
199+ $ container ['orm.mapping.factory.simple_xml ' ] = $ container ->protect (function (Configuration $ config , $ mappingOptions ) {
200+ return new YamlDriver ($ mappingOptions ['path ' ]);
201+ });
202+
203+ $ container ['orm.mapping.factory.php ' ] = $ container ->protect (function (Configuration $ config , $ mappingOptions ) {
204+ return new YamlDriver ($ mappingOptions ['path ' ]);
205+ });
206+
207+ $ container ['orm.mapping.factory ' ] = $ container ->protect (function ($ driver , Configuration $ config , $ mappingOptions ) use ($ container ) {
208+ $ mappingFactoryKey = 'orm.mapping.factory. ' .$ driver ;
209+ if (!isset ($ container [$ mappingFactoryKey ])) {
210+ throw new \RuntimeException ("Factory ' $ mappingFactoryKey' for mapping type ' $ driver' not defined " );
211+ }
212+
213+ return $ container [$ mappingFactoryKey ]($ config , $ mappingOptions );
214+ });
215+
210216 $ container ['orm.cache.configurer ' ] = $ container ->protect (function ($ name , Configuration $ config , $ options ) use ($ container ) {
211217 $ config ->setMetadataCacheImpl ($ container ['orm.cache.locator ' ]($ name , 'metadata ' , $ options ));
212218 $ config ->setQueryCacheImpl ($ container ['orm.cache.locator ' ]($ name , 'query ' , $ options ));
0 commit comments