@@ -133,13 +133,6 @@ class ServiceManager implements ServiceLocatorInterface
133
133
*/
134
134
protected $ sharedByDefault = true ;
135
135
136
- /**
137
- * Service manager was already configured?
138
- *
139
- * @var bool
140
- */
141
- protected $ configured = false ;
142
-
143
136
/**
144
137
* Cached abstract factories from string.
145
138
*
@@ -350,18 +343,7 @@ public function configure(array $config)
350
343
}
351
344
352
345
if (isset ($ config ['invokables ' ]) && ! empty ($ config ['invokables ' ])) {
353
- $ aliases = $ this ->createAliasesForInvokables ($ config ['invokables ' ]);
354
- $ factories = $ this ->createFactoriesForInvokables ($ config ['invokables ' ]);
355
-
356
- if (! empty ($ aliases )) {
357
- $ config ['aliases ' ] = (isset ($ config ['aliases ' ]))
358
- ? array_merge ($ config ['aliases ' ], $ aliases )
359
- : $ aliases ;
360
- }
361
-
362
- $ config ['factories ' ] = (isset ($ config ['factories ' ]))
363
- ? array_merge ($ config ['factories ' ], $ factories )
364
- : $ factories ;
346
+ $ this ->createAliasesAndFactoriesForInvokables ($ config ['invokables ' ]);
365
347
}
366
348
367
349
if (isset ($ config ['factories ' ])) {
@@ -378,8 +360,9 @@ public function configure(array $config)
378
360
379
361
if (isset ($ config ['aliases ' ])) {
380
362
$ this ->aliases = $ config ['aliases ' ] + $ this ->aliases ;
381
- $ this ->mapAliasesToTargets ();
382
- } elseif (! $ this ->configured && ! empty ($ this ->aliases )) {
363
+ }
364
+
365
+ if (! empty ($ this ->aliases )) {
383
366
$ this ->mapAliasesToTargets ();
384
367
}
385
368
@@ -408,8 +391,6 @@ public function configure(array $config)
408
391
$ this ->resolveInitializers ($ config ['initializers ' ]);
409
392
}
410
393
411
- $ this ->configured = true ;
412
-
413
394
return $ this ;
414
395
}
415
396
@@ -437,7 +418,11 @@ public function setAlias($alias, $target)
437
418
*/
438
419
public function setInvokableClass ($ name , $ class = null )
439
420
{
440
- $ this ->configure (['invokables ' => [$ name => $ class ?: $ name ]]);
421
+ if (! isset ($ this ->services [$ name ]) || $ this ->allowOverride ) {
422
+ $ this ->createAliasesAndFactoriesForInvokables ([$ name => $ class ?? $ name ]);
423
+ return ;
424
+ }
425
+ throw new ContainerModificationsNotAllowedException ($ name );
441
426
}
442
427
443
428
/**
@@ -763,49 +748,22 @@ private function createLazyServiceDelegatorFactory()
763
748
}
764
749
765
750
/**
766
- * Create aliases for invokable classes.
751
+ * Create aliases and factories for invokable classes.
767
752
*
768
753
* If an invokable service name does not match the class it maps to, this
769
754
* creates an alias to the class (which will later be mapped as an
770
755
* invokable factory).
771
756
*
772
757
* @param array $invokables
773
- * @return array
774
758
*/
775
- private function createAliasesForInvokables (array $ invokables )
759
+ private function createAliasesAndFactoriesForInvokables (array $ invokables )
776
760
{
777
- $ aliases = [];
778
761
foreach ($ invokables as $ name => $ class ) {
779
- if ($ name === $ class ) {
780
- continue ;
762
+ $ this ->factories [$ class ] = Factory \InvokableFactory::class;
763
+ if ($ name !== $ class ) {
764
+ $ this ->aliases [$ name ] = $ class ;
781
765
}
782
- $ aliases [$ name ] = $ class ;
783
- }
784
- return $ aliases ;
785
- }
786
-
787
- /**
788
- * Create invokable factories for invokable classes.
789
- *
790
- * If an invokable service name does not match the class it maps to, this
791
- * creates an invokable factory entry for the class name; otherwise, it
792
- * creates an invokable factory for the entry name.
793
- *
794
- * @param array $invokables
795
- * @return array
796
- */
797
- private function createFactoriesForInvokables (array $ invokables )
798
- {
799
- $ factories = [];
800
- foreach ($ invokables as $ name => $ class ) {
801
- if ($ name === $ class ) {
802
- $ factories [$ name ] = Factory \InvokableFactory::class;
803
- continue ;
804
- }
805
-
806
- $ factories [$ class ] = Factory \InvokableFactory::class;
807
766
}
808
- return $ factories ;
809
767
}
810
768
811
769
/**
@@ -824,7 +782,7 @@ private function createFactoriesForInvokables(array $invokables)
824
782
*/
825
783
private function validateServiceNames (array $ config )
826
784
{
827
- if ($ this ->allowOverride || ! $ this -> configured ) {
785
+ if ($ this ->allowOverride ) {
828
786
return ;
829
787
}
830
788
0 commit comments