@@ -222,7 +222,7 @@ public function dump(array $options = [])
222
222
}
223
223
224
224
$ code =
225
- $ this ->startClass ($ options ['class ' ], $ baseClass ).
225
+ $ this ->startClass ($ options ['class ' ], $ baseClass, $ this -> inlineFactories && $ proxyClasses ).
226
226
$ this ->addServices ($ services ).
227
227
$ this ->addDeprecatedAliases ().
228
228
$ this ->addDefaultParametersMethod ()
@@ -286,14 +286,15 @@ class %s extends {$options['class']}
286
286
287
287
$ code .= $ this ->endClass ();
288
288
289
- if ($ this ->inlineFactories ) {
289
+ if ($ this ->inlineFactories && $ proxyClasses ) {
290
+ $ files ['proxy-classes.php ' ] = "<?php \n\n" ;
291
+
290
292
foreach ($ proxyClasses as $ c ) {
291
- $ code .= $ c ;
293
+ $ files [ ' proxy-classes.php ' ] .= $ c ;
292
294
}
293
295
}
294
296
295
297
$ files [$ options ['class ' ].'.php ' ] = $ code ;
296
- $ preloadedFiles [$ options ['class ' ].'.php ' ] = $ options ['class ' ].'.php ' ;
297
298
$ hash = ucfirst (strtr (ContainerBuilder::hash ($ files ), '._ ' , 'xx ' ));
298
299
$ code = [];
299
300
@@ -313,7 +314,9 @@ class %s extends {$options['class']}
313
314
$ autoloadFile = trim ($ this ->export ($ autoloadFile ), '() \\' );
314
315
315
316
$ preloadedFiles = array_reverse ($ preloadedFiles );
316
- $ preloadedFiles = implode ("'; \nrequire __DIR__.'/ " , $ preloadedFiles );
317
+ if ('' !== $ preloadedFiles = implode ("'; \nrequire __DIR__.'/ " , $ preloadedFiles )) {
318
+ $ preloadedFiles = "require __DIR__.'/ $ preloadedFiles'; \n" ;
319
+ }
317
320
318
321
$ code [$ options ['class ' ].'.preload.php ' ] = <<<EOF
319
322
<?php
@@ -328,8 +331,8 @@ class %s extends {$options['class']}
328
331
}
329
332
330
333
require $ autoloadFile;
331
- require __DIR__.'/ $ preloadedFiles ' ;
332
-
334
+ ( require __DIR__.'/Container { $ hash } / { $ options [ ' class ' ]} .php')->set(\\Container { $ hash } \\ { $ options [ ' class ' ]} ::class, null) ;
335
+ $ preloadedFiles
333
336
\$classes = [];
334
337
335
338
EOF ;
@@ -1179,7 +1182,7 @@ private function addNewInstance(Definition $definition, string $return = '', str
1179
1182
return $ return .sprintf ('new %s(%s) ' , $ this ->dumpLiteralClass ($ this ->dumpValue ($ class )), implode (', ' , $ arguments )).$ tail ;
1180
1183
}
1181
1184
1182
- private function startClass (string $ class , string $ baseClass ): string
1185
+ private function startClass (string $ class , string $ baseClass, bool $ hasProxyClasses ): string
1183
1186
{
1184
1187
$ namespaceLine = !$ this ->asFiles && $ this ->namespace ? "\nnamespace {$ this ->namespace }; \n" : '' ;
1185
1188
@@ -1239,7 +1242,7 @@ public function __construct()
1239
1242
$ code .= $ this ->addMethodMap ();
1240
1243
$ code .= $ this ->asFiles && !$ this ->inlineFactories ? $ this ->addFileMap () : '' ;
1241
1244
$ code .= $ this ->addAliases ();
1242
- $ code .= $ this ->addInlineRequires ();
1245
+ $ code .= $ this ->addInlineRequires ($ hasProxyClasses );
1243
1246
$ code .= <<<EOF
1244
1247
}
1245
1248
@@ -1451,15 +1454,12 @@ protected function {$methodNameAlias}()
1451
1454
return $ code ;
1452
1455
}
1453
1456
1454
- private function addInlineRequires (): string
1457
+ private function addInlineRequires (bool $ hasProxyClasses ): string
1455
1458
{
1456
- if (!$ this ->hotPathTag || !$ this ->inlineRequires ) {
1457
- return '' ;
1458
- }
1459
-
1460
1459
$ lineage = [];
1460
+ $ hotPathServices = $ this ->hotPathTag && $ this ->inlineRequires ? $ this ->container ->findTaggedServiceIds ($ this ->hotPathTag ) : [];
1461
1461
1462
- foreach ($ this -> container -> findTaggedServiceIds ( $ this -> hotPathTag ) as $ id => $ tags ) {
1462
+ foreach ($ hotPathServices as $ id => $ tags ) {
1463
1463
$ definition = $ this ->container ->getDefinition ($ id );
1464
1464
1465
1465
if ($ this ->getProxyDumper ()->isProxyCandidate ($ definition )) {
@@ -1484,6 +1484,10 @@ private function addInlineRequires(): string
1484
1484
}
1485
1485
}
1486
1486
1487
+ if ($ hasProxyClasses ) {
1488
+ $ code .= "\n include __DIR__.'/proxy-classes.php'; " ;
1489
+ }
1490
+
1487
1491
return $ code ? sprintf ("\n \$this->privates['service_container'] = function () {%s \n }; \n" , $ code ) : '' ;
1488
1492
}
1489
1493
0 commit comments