From b65af58a1b1fa85852eeba56ae6eed57c239bbce Mon Sep 17 00:00:00 2001 From: Kevin Bond Date: Tue, 25 Jan 2022 10:14:49 -0500 Subject: [PATCH 1/5] [TwigComponent][LiveComponent] refactor component config --- src/LiveComponent/composer.json | 2 +- .../LiveComponentExtension.php | 1 + .../EventListener/LiveComponentSubscriber.php | 8 ++++-- src/LiveComponent/src/Resources/doc/index.rst | 28 +++++++++---------- .../src/Twig/LiveComponentExtension.php | 2 +- .../src/Twig/LiveComponentRuntime.php | 21 ++++++++------ src/LiveComponent/tests/Fixture/Kernel.php | 6 ++-- .../templates/components/component1.html.twig | 2 +- .../templates/components/component2.html.twig | 2 +- src/TwigComponent/src/ComponentFactory.php | 20 ++++++------- src/TwigComponent/src/ComponentRenderer.php | 8 ++++-- .../src/Twig/ComponentRuntime.php | 2 +- .../Integration/ComponentFactoryTest.php | 15 ++++++++-- 13 files changed, 67 insertions(+), 50 deletions(-) diff --git a/src/LiveComponent/composer.json b/src/LiveComponent/composer.json index 8f246c37ae0..ab42ffc7d7e 100644 --- a/src/LiveComponent/composer.json +++ b/src/LiveComponent/composer.json @@ -27,7 +27,7 @@ }, "require": { "php": ">=8.0", - "symfony/ux-twig-component": "^2.0" + "symfony/ux-twig-component": "^2.1" }, "require-dev": { "symfony/framework-bundle": "^4.4|^5.0|^6.0", diff --git a/src/LiveComponent/src/DependencyInjection/LiveComponentExtension.php b/src/LiveComponent/src/DependencyInjection/LiveComponentExtension.php index fffceedac2b..9f96fb283d0 100644 --- a/src/LiveComponent/src/DependencyInjection/LiveComponentExtension.php +++ b/src/LiveComponent/src/DependencyInjection/LiveComponentExtension.php @@ -47,6 +47,7 @@ function (ChildDefinition $definition, AsLiveComponent $attribute) { 'key' => $attribute->name, 'template' => $attribute->template, 'default_action' => $attribute->defaultAction, + 'live' => true, ])) ->addTag('controller.service_arguments') ; diff --git a/src/LiveComponent/src/EventListener/LiveComponentSubscriber.php b/src/LiveComponent/src/EventListener/LiveComponentSubscriber.php index b652a59928f..0557778e5f6 100644 --- a/src/LiveComponent/src/EventListener/LiveComponentSubscriber.php +++ b/src/LiveComponent/src/EventListener/LiveComponentSubscriber.php @@ -77,7 +77,11 @@ public function onKernelRequest(RequestEvent $event): void throw new NotFoundHttpException(sprintf('Component "%s" not found.', $componentName), $e); } - $request->attributes->set('_component_template', $config['template']); + if (!isset($config['live'])) { + throw new NotFoundHttpException(sprintf('"%s" is not a Live Component.', $config['class'])); + } + + $request->attributes->set('_component_config', $config); if ('get' === $action) { $defaultAction = trim($config['default_action'] ?? '__invoke', '()'); @@ -221,7 +225,7 @@ private function createResponse(object $component, Request $request): Response $html = $this->container->get(ComponentRenderer::class)->render( $component, - $request->attributes->get('_component_template') + $request->attributes->get('_component_config') ); return new Response($html); diff --git a/src/LiveComponent/src/Resources/doc/index.rst b/src/LiveComponent/src/Resources/doc/index.rst index d51380282c0..0a89433159a 100644 --- a/src/LiveComponent/src/Resources/doc/index.rst +++ b/src/LiveComponent/src/Resources/doc/index.rst @@ -46,7 +46,7 @@ A real-time product search component might look like this:: .. code-block:: twig {# templates/components/product_search.html.twig #} -
+
- +
+ +
{{ this.randomNumber }}
@@ -176,7 +176,7 @@ and give the user a new random number: .. code-block:: twig -
+
{{ this.randomNumber }}