1111
1212namespace Symfony \UX \TwigComponent \Twig ;
1313
14+ use Symfony \Component \DependencyInjection \ServiceLocator ;
1415use Symfony \UX \TwigComponent \ComponentRenderer ;
1516use Symfony \UX \TwigComponent \Event \PreRenderEvent ;
1617
@@ -24,15 +25,13 @@ final class ComponentRuntime
2425{
2526 public function __construct (
2627 private readonly ComponentRenderer $ renderer ,
28+ private readonly ServiceLocator $ renderers ,
2729 ) {
2830 }
2931
30- /**
31- * @param array<string, mixed> $props
32- */
33- public function render (string $ name , array $ props = []): string
32+ public function finishEmbedComponent (): void
3433 {
35- return $ this ->renderer ->createAndRender ( $ name , $ props );
34+ $ this ->renderer ->finishEmbeddedComponentRender ( );
3635 }
3736
3837 /**
@@ -43,6 +42,15 @@ public function preRender(string $name, array $props): ?string
4342 return $ this ->renderer ->preCreateForRender ($ name , $ props );
4443 }
4544
45+ public function render (string $ name , array $ props = []): string
46+ {
47+ if ($ this ->renderers ->has ($ normalized = strtolower ($ name ))) {
48+ return $ this ->renderers ->get ($ normalized )->render ($ props );
49+ }
50+
51+ return $ this ->renderer ->createAndRender ($ name , $ props );
52+ }
53+
4654 /**
4755 * @param array<string, mixed> $props
4856 * @param array<string, mixed> $context
@@ -51,9 +59,4 @@ public function startEmbedComponent(string $name, array $props, array $context,
5159 {
5260 return $ this ->renderer ->startEmbeddedComponentRender ($ name , $ props , $ context , $ hostTemplateName , $ index );
5361 }
54-
55- public function finishEmbedComponent (): void
56- {
57- $ this ->renderer ->finishEmbeddedComponentRender ();
58- }
5962}
0 commit comments