@@ -215,7 +215,7 @@ public function dump(array $options = []): string|array
215
215
}
216
216
217
217
$ code =
218
- $ this ->startClass ($ options ['class ' ], $ baseClass ).
218
+ $ this ->startClass ($ options ['class ' ], $ baseClass, $ this -> inlineFactories && $ proxyClasses ).
219
219
$ this ->addServices ($ services ).
220
220
$ this ->addDeprecatedAliases ().
221
221
$ this ->addDefaultParametersMethod ()
@@ -279,14 +279,15 @@ class %s extends {$options['class']}
279
279
280
280
$ code .= $ this ->endClass ();
281
281
282
- if ($ this ->inlineFactories ) {
282
+ if ($ this ->inlineFactories && $ proxyClasses ) {
283
+ $ files ['proxy-classes.php ' ] = "<?php \n\n" ;
284
+
283
285
foreach ($ proxyClasses as $ c ) {
284
- $ code .= $ c ;
286
+ $ files [ ' proxy-classes.php ' ] .= $ c ;
285
287
}
286
288
}
287
289
288
290
$ files [$ options ['class ' ].'.php ' ] = $ code ;
289
- $ preloadedFiles [$ options ['class ' ].'.php ' ] = $ options ['class ' ].'.php ' ;
290
291
$ hash = ucfirst (strtr (ContainerBuilder::hash ($ files ), '._ ' , 'xx ' ));
291
292
$ code = [];
292
293
@@ -306,7 +307,9 @@ class %s extends {$options['class']}
306
307
$ autoloadFile = trim ($ this ->export ($ autoloadFile ), '() \\' );
307
308
308
309
$ preloadedFiles = array_reverse ($ preloadedFiles );
309
- $ preloadedFiles = implode ("'; \nrequire __DIR__.'/ " , $ preloadedFiles );
310
+ if ('' !== $ preloadedFiles = implode ("'; \nrequire __DIR__.'/ " , $ preloadedFiles )) {
311
+ $ preloadedFiles = "require __DIR__.'/ $ preloadedFiles'; \n" ;
312
+ }
310
313
311
314
$ code [$ options ['class ' ].'.preload.php ' ] = <<<EOF
312
315
<?php
@@ -321,8 +324,8 @@ class %s extends {$options['class']}
321
324
}
322
325
323
326
require $ autoloadFile;
324
- require __DIR__.'/ $ preloadedFiles ' ;
325
-
327
+ ( require __DIR__.'/Container { $ hash } / { $ options [ ' class ' ]} .php')->set(\\Container { $ hash } \\ { $ options [ ' class ' ]} ::class, null) ;
328
+ $ preloadedFiles
326
329
\$classes = [];
327
330
328
331
EOF ;
@@ -1166,7 +1169,7 @@ private function addNewInstance(Definition $definition, string $return = '', str
1166
1169
return $ return .sprintf ('new %s(%s) ' , $ this ->dumpLiteralClass ($ this ->dumpValue ($ class )), implode (', ' , $ arguments )).$ tail ;
1167
1170
}
1168
1171
1169
- private function startClass (string $ class , string $ baseClass ): string
1172
+ private function startClass (string $ class , string $ baseClass, bool $ hasProxyClasses ): string
1170
1173
{
1171
1174
$ namespaceLine = !$ this ->asFiles && $ this ->namespace ? "\nnamespace {$ this ->namespace }; \n" : '' ;
1172
1175
@@ -1226,7 +1229,7 @@ public function __construct()
1226
1229
$ code .= $ this ->addMethodMap ();
1227
1230
$ code .= $ this ->asFiles && !$ this ->inlineFactories ? $ this ->addFileMap () : '' ;
1228
1231
$ code .= $ this ->addAliases ();
1229
- $ code .= $ this ->addInlineRequires ();
1232
+ $ code .= $ this ->addInlineRequires ($ hasProxyClasses );
1230
1233
$ code .= <<<EOF
1231
1234
}
1232
1235
@@ -1438,15 +1441,12 @@ protected function {$methodNameAlias}()
1438
1441
return $ code ;
1439
1442
}
1440
1443
1441
- private function addInlineRequires (): string
1444
+ private function addInlineRequires (bool $ hasProxyClasses ): string
1442
1445
{
1443
- if (!$ this ->hotPathTag || !$ this ->inlineRequires ) {
1444
- return '' ;
1445
- }
1446
-
1447
1446
$ lineage = [];
1447
+ $ hotPathServices = $ this ->hotPathTag && $ this ->inlineRequires ? $ this ->container ->findTaggedServiceIds ($ this ->hotPathTag ) : [];
1448
1448
1449
- foreach ($ this -> container -> findTaggedServiceIds ( $ this -> hotPathTag ) as $ id => $ tags ) {
1449
+ foreach ($ hotPathServices as $ id => $ tags ) {
1450
1450
$ definition = $ this ->container ->getDefinition ($ id );
1451
1451
1452
1452
if ($ this ->getProxyDumper ()->isProxyCandidate ($ definition )) {
@@ -1471,6 +1471,10 @@ private function addInlineRequires(): string
1471
1471
}
1472
1472
}
1473
1473
1474
+ if ($ hasProxyClasses ) {
1475
+ $ code .= "\n include __DIR__.'/proxy-classes.php'; " ;
1476
+ }
1477
+
1474
1478
return $ code ? sprintf ("\n \$this->privates['service_container'] = function () {%s \n }; \n" , $ code ) : '' ;
1475
1479
}
1476
1480
0 commit comments