Skip to content

Commit 917e4d4

Browse files
committed
don't register class as service id
1 parent 9b1812a commit 917e4d4

File tree

7 files changed

+80
-48
lines changed

7 files changed

+80
-48
lines changed

src/LiveComponent/src/DependencyInjection/Compiler/LiveComponentPass.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
1515
use Symfony\Component\DependencyInjection\ContainerBuilder;
1616
use Symfony\UX\LiveComponent\Attribute\AsLiveComponent;
17-
use Symfony\UX\LiveComponent\EventListener\LiveComponentSubscriber;
1817

1918
/**
2019
* @author Kevin Bond <[email protected]>
@@ -37,6 +36,6 @@ public function process(ContainerBuilder $container): void
3736
$componentServiceMap[$attribute->getName()] = $id;
3837
}
3938

40-
$container->findDefinition(LiveComponentSubscriber::class)->setArgument(0, $componentServiceMap);
39+
$container->findDefinition('ux.live_component.event_subscriber')->setArgument(0, $componentServiceMap);
4140
}
4241
}

src/LiveComponent/src/DependencyInjection/LiveComponentExtension.php

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
use Symfony\UX\LiveComponent\PropertyHydratorInterface;
2929
use Symfony\UX\LiveComponent\Twig\LiveComponentExtension as LiveComponentTwigExtension;
3030
use Symfony\UX\LiveComponent\Twig\LiveComponentRuntime;
31+
use Symfony\UX\TwigComponent\ComponentFactory;
32+
use Symfony\UX\TwigComponent\ComponentRenderer;
3133

3234
/**
3335
* @author Kevin Bond <[email protected]>
@@ -51,36 +53,39 @@ public function load(array $configs, ContainerBuilder $container): void
5153
->addTag('twig.component.property_hydrator')
5254
;
5355

54-
$container->register(DoctrineEntityPropertyHydrator::class)
56+
$container->register('ux.live_component.doctrine_entity_property_hydrator', DoctrineEntityPropertyHydrator::class)
5557
->setArguments([[new Reference('doctrine')]])
5658
->addTag('twig.component.property_hydrator', ['priority' => -200])
5759
;
5860

59-
$container->register('twig.component.datetime_property_hydrator', NormalizerBridgePropertyHydrator::class)
61+
$container->register('ux.live_component.datetime_property_hydrator', NormalizerBridgePropertyHydrator::class)
6062
->setArguments([new Reference('serializer.normalizer.datetime')])
6163
->addTag('twig.component.property_hydrator', ['priority' => -100])
6264
;
6365

64-
$container->register(LiveComponentHydrator::class)
66+
$container->register('ux.live_component.component_hydrator', LiveComponentHydrator::class)
6567
->setArguments([
6668
new TaggedIteratorArgument('twig.component.property_hydrator'),
6769
new Reference('property_accessor'),
6870
'%kernel.secret%',
6971
])
7072
;
7173

72-
$container->register(LiveComponentSubscriber::class)
74+
$container->register('ux.live_component.event_subscriber', LiveComponentSubscriber::class)
7375
->addTag('kernel.event_subscriber')
76+
->addTag('container.service_subscriber', ['key' => ComponentFactory::class, 'id' => 'ux.twig_component.component_factory'])
77+
->addTag('container.service_subscriber', ['key' => ComponentRenderer::class, 'id' => 'ux.twig_component.component_renderer'])
78+
->addTag('container.service_subscriber', ['key' => LiveComponentHydrator::class, 'id' => 'ux.live_component.component_hydrator'])
7479
->addTag('container.service_subscriber')
7580
;
7681

77-
$container->register(LiveComponentTwigExtension::class)
82+
$container->register('ux.live_component.twig.component_extension', LiveComponentTwigExtension::class)
7883
->addTag('twig.extension')
7984
;
8085

81-
$container->register(LiveComponentRuntime::class)
86+
$container->register('ux.live_component.twig.component_runtime', LiveComponentRuntime::class)
8287
->setArguments([
83-
new Reference(LiveComponentHydrator::class),
88+
new Reference('ux.live_component.component_hydrator'),
8489
new Reference(UrlGeneratorInterface::class),
8590
new Reference(CsrfTokenManagerInterface::class, ContainerBuilder::NULL_ON_INVALID_REFERENCE),
8691
])

src/LiveComponent/tests/Functional/EventListener/LiveComponentSubscriberTest.php

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\UX\LiveComponent\Tests\Functional\EventListener;
1313

1414
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
15+
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
1516
use Symfony\UX\LiveComponent\LiveComponentHydrator;
1617
use Symfony\UX\LiveComponent\Tests\Fixture\Component\Component1;
1718
use Symfony\UX\LiveComponent\Tests\Fixture\Component\Component2;
@@ -37,10 +38,10 @@ public function testCanRenderComponentAsHtmlOrJson(): void
3738
self::bootKernel();
3839

3940
/** @var LiveComponentHydrator $hydrator */
40-
$hydrator = self::$container->get(LiveComponentHydrator::class);
41+
$hydrator = self::$container->get('ux.live_component.component_hydrator');
4142

4243
/** @var ComponentFactory $factory */
43-
$factory = self::$container->get(ComponentFactory::class);
44+
$factory = self::$container->get('ux.twig_component.component_factory');
4445

4546
/** @var Component1 $component */
4647
$component = $factory->create('component1', [
@@ -82,10 +83,10 @@ public function testCanExecuteComponentAction(): void
8283
self::bootKernel();
8384

8485
/** @var LiveComponentHydrator $hydrator */
85-
$hydrator = self::$container->get(LiveComponentHydrator::class);
86+
$hydrator = self::$container->get('ux.live_component.component_hydrator');
8687

8788
/** @var ComponentFactory $factory */
88-
$factory = self::$container->get(ComponentFactory::class);
89+
$factory = self::$container->get('ux.twig_component.component_factory');
8990

9091
/** @var Component2 $component */
9192
$component = $factory->create('component2');
@@ -140,6 +141,19 @@ public function testMissingCsrfTokenForComponentActionFails(): void
140141
->post('/_components/component2/increase')
141142
->assertStatus(400)
142143
;
144+
145+
try {
146+
$this->browser()
147+
->throwExceptions()
148+
->post('/_components/component2/increase')
149+
;
150+
} catch (BadRequestHttpException $e) {
151+
$this->assertSame('Invalid CSRF token.', $e->getMessage());
152+
153+
return;
154+
}
155+
156+
$this->fail('Expected exception not thrown.');
143157
}
144158

145159
public function testInvalidCsrfTokenForComponentActionFails(): void
@@ -150,17 +164,32 @@ public function testInvalidCsrfTokenForComponentActionFails(): void
150164
])
151165
->assertStatus(400)
152166
;
167+
168+
try {
169+
$this->browser()
170+
->throwExceptions()
171+
->post('/_components/component2/increase', [
172+
'headers' => ['X-CSRF-TOKEN' => 'invalid'],
173+
])
174+
;
175+
} catch (BadRequestHttpException $e) {
176+
$this->assertSame('Invalid CSRF token.', $e->getMessage());
177+
178+
return;
179+
}
180+
181+
$this->fail('Expected exception not thrown.');
153182
}
154183

155184
public function testBeforeReRenderHookOnlyExecutedDuringAjax(): void
156185
{
157186
self::bootKernel();
158187

159188
/** @var LiveComponentHydrator $hydrator */
160-
$hydrator = self::$container->get(LiveComponentHydrator::class);
189+
$hydrator = self::$container->get('ux.live_component.component_hydrator');
161190

162191
/** @var ComponentFactory $factory */
163-
$factory = self::$container->get(ComponentFactory::class);
192+
$factory = self::$container->get('ux.twig_component.component_factory');
164193

165194
/** @var Component2 $component */
166195
$component = $factory->create('component2');
@@ -182,10 +211,10 @@ public function testCanRedirectFromComponentAction(): void
182211
self::bootKernel();
183212

184213
/** @var LiveComponentHydrator $hydrator */
185-
$hydrator = self::$container->get(LiveComponentHydrator::class);
214+
$hydrator = self::$container->get('ux.live_component.component_hydrator');
186215

187216
/** @var ComponentFactory $factory */
188-
$factory = self::$container->get(ComponentFactory::class);
217+
$factory = self::$container->get('ux.twig_component.component_factory');
189218

190219
/** @var Component2 $component */
191220
$component = $factory->create('component2');

src/LiveComponent/tests/Integration/LiveComponentHydratorTest.php

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ public function testCanDehydrateAndHydrateLiveComponent(): void
3535
self::bootKernel();
3636

3737
/** @var LiveComponentHydrator $hydrator */
38-
$hydrator = self::$container->get(LiveComponentHydrator::class);
38+
$hydrator = self::$container->get('ux.live_component.component_hydrator');
3939

4040
/** @var ComponentFactory $factory */
41-
$factory = self::$container->get(ComponentFactory::class);
41+
$factory = self::$container->get('ux.twig_component.component_factory');
4242

4343
/** @var Component1 $component */
4444
$component = $factory->create('component1', [
@@ -76,10 +76,10 @@ public function testCanModifyWritableProps(): void
7676
self::bootKernel();
7777

7878
/** @var LiveComponentHydrator $hydrator */
79-
$hydrator = self::$container->get(LiveComponentHydrator::class);
79+
$hydrator = self::$container->get('ux.live_component.component_hydrator');
8080

8181
/** @var ComponentFactory $factory */
82-
$factory = self::$container->get(ComponentFactory::class);
82+
$factory = self::$container->get('ux.twig_component.component_factory');
8383

8484
/** @var Component1 $component */
8585
$component = $factory->create('component1', [
@@ -103,10 +103,10 @@ public function testCannotModifyReadonlyProps(): void
103103
self::bootKernel();
104104

105105
/** @var LiveComponentHydrator $hydrator */
106-
$hydrator = self::$container->get(LiveComponentHydrator::class);
106+
$hydrator = self::$container->get('ux.live_component.component_hydrator');
107107

108108
/** @var ComponentFactory $factory */
109-
$factory = self::$container->get(ComponentFactory::class);
109+
$factory = self::$container->get('ux.twig_component.component_factory');
110110

111111
/** @var Component1 $component */
112112
$component = $factory->create('component1', [
@@ -129,10 +129,10 @@ public function testHydrationFailsIfChecksumMissing(): void
129129
self::bootKernel();
130130

131131
/** @var LiveComponentHydrator $hydrator */
132-
$hydrator = self::$container->get(LiveComponentHydrator::class);
132+
$hydrator = self::$container->get('ux.live_component.component_hydrator');
133133

134134
/** @var ComponentFactory $factory */
135-
$factory = self::$container->get(ComponentFactory::class);
135+
$factory = self::$container->get('ux.twig_component.component_factory');
136136

137137
$this->expectException(\RuntimeException::class);
138138
$hydrator->hydrate($factory->get('component1'), []);
@@ -143,10 +143,10 @@ public function testHydrationFailsOnChecksumMismatch(): void
143143
self::bootKernel();
144144

145145
/** @var LiveComponentHydrator $hydrator */
146-
$hydrator = self::$container->get(LiveComponentHydrator::class);
146+
$hydrator = self::$container->get('ux.live_component.component_hydrator');
147147

148148
/** @var ComponentFactory $factory */
149-
$factory = self::$container->get(ComponentFactory::class);
149+
$factory = self::$container->get('ux.twig_component.component_factory');
150150

151151
$this->expectException(\RuntimeException::class);
152152
$hydrator->hydrate($factory->get('component1'), ['_checksum' => 'invalid']);
@@ -157,10 +157,10 @@ public function testPreDehydrateAndPostHydrateHooksCalled(): void
157157
self::bootKernel();
158158

159159
/** @var LiveComponentHydrator $hydrator */
160-
$hydrator = self::$container->get(LiveComponentHydrator::class);
160+
$hydrator = self::$container->get('ux.live_component.component_hydrator');
161161

162162
/** @var ComponentFactory $factory */
163-
$factory = self::$container->get(ComponentFactory::class);
163+
$factory = self::$container->get('ux.twig_component.component_factory');
164164

165165
/** @var Component2 $component */
166166
$component = $factory->create('component2');
@@ -190,10 +190,10 @@ public function testDeletingEntityBetweenDehydrationAndHydrationSetsItToNull():
190190
self::bootKernel();
191191

192192
/** @var LiveComponentHydrator $hydrator */
193-
$hydrator = self::$container->get(LiveComponentHydrator::class);
193+
$hydrator = self::$container->get('ux.live_component.component_hydrator');
194194

195195
/** @var ComponentFactory $factory */
196-
$factory = self::$container->get(ComponentFactory::class);
196+
$factory = self::$container->get('ux.twig_component.component_factory');
197197

198198
$entity = create(Entity1::class);
199199

@@ -228,10 +228,10 @@ public function testCorrectlyUsesCustomFrontendNameInDehydrateAndHydrate(): void
228228
self::bootKernel();
229229

230230
/** @var LiveComponentHydrator $hydrator */
231-
$hydrator = self::$container->get(LiveComponentHydrator::class);
231+
$hydrator = self::$container->get('ux.live_component.component_hydrator');
232232

233233
/** @var ComponentFactory $factory */
234-
$factory = self::$container->get(ComponentFactory::class);
234+
$factory = self::$container->get('ux.twig_component.component_factory');
235235

236236
/** @var Component3 $component */
237237
$component = $factory->create('component3', ['prop1' => 'value1', 'prop2' => 'value2']);

src/TwigComponent/src/DependencyInjection/Compiler/TwigComponentPass.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
use Symfony\Component\DependencyInjection\Exception\LogicException;
1818
use Symfony\Component\DependencyInjection\Reference;
1919
use Symfony\UX\TwigComponent\Attribute\AsTwigComponent;
20-
use Symfony\UX\TwigComponent\ComponentFactory;
2120

2221
/**
2322
* @author Kevin Bond <[email protected]>
@@ -45,7 +44,7 @@ public function process(ContainerBuilder $container): void
4544
$componentDefinition->setShared(false);
4645
}
4746

48-
$container->findDefinition(ComponentFactory::class)
47+
$container->findDefinition('ux.twig_component.component_factory')
4948
->setArgument(0, new ServiceLocatorArgument($componentMap))
5049
;
5150
}

src/TwigComponent/src/DependencyInjection/TwigComponentExtension.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,27 +40,27 @@ static function (ChildDefinition $definition) {
4040
);
4141
}
4242

43-
$container->register(ComponentFactory::class)
43+
$container->register('ux.twig_component.component_factory', ComponentFactory::class)
4444
->setArguments([
45-
new ServiceLocatorArgument(),
45+
new ServiceLocatorArgument(), // set in compiler pass
4646
new Reference('property_accessor'),
4747
])
4848
;
4949

50-
$container->register(ComponentRenderer::class)
50+
$container->register('ux.twig_component.component_renderer', ComponentRenderer::class)
5151
->setArguments([
5252
new Reference('twig'),
5353
])
5454
;
5555

56-
$container->register(ComponentExtension::class)
56+
$container->register('ux.twig_component.twig.component_extension', ComponentExtension::class)
5757
->addTag('twig.extension')
5858
;
5959

60-
$container->register(ComponentRuntime::class)
60+
$container->register('ux.twig_component.twig.component_runtime', ComponentRuntime::class)
6161
->setArguments([
62-
new Reference(ComponentFactory::class),
63-
new Reference(ComponentRenderer::class),
62+
new Reference('ux.twig_component.component_factory'),
63+
new Reference('ux.twig_component.component_renderer'),
6464
])
6565
->addTag('twig.runtime')
6666
;

src/TwigComponent/tests/Integration/ComponentFactoryTest.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public function testCreatedComponentsAreNotShared(): void
2828
self::bootKernel();
2929

3030
/** @var ComponentFactory $factory */
31-
$factory = self::$container->get(ComponentFactory::class);
31+
$factory = self::$container->get('ux.twig_component.component_factory');
3232

3333
/** @var ComponentA $componentA */
3434
$componentA = $factory->create('component_a', ['propA' => 'A', 'propB' => 'B']);
@@ -49,7 +49,7 @@ public function testNonAutoConfiguredCreatedComponentsAreNotShared(): void
4949
self::bootKernel();
5050

5151
/** @var ComponentFactory $factory */
52-
$factory = self::$container->get(ComponentFactory::class);
52+
$factory = self::$container->get('ux.twig_component.component_factory');
5353

5454
/** @var ComponentB $componentA */
5555
$componentA = $factory->create('component_b');
@@ -65,7 +65,7 @@ public function testCanGetUnmountedComponent(): void
6565
self::bootKernel();
6666

6767
/** @var ComponentFactory $factory */
68-
$factory = self::$container->get(ComponentFactory::class);
68+
$factory = self::$container->get('ux.twig_component.component_factory');
6969

7070
/** @var ComponentA $component */
7171
$component = $factory->get('component_a');
@@ -79,7 +79,7 @@ public function testMountCanHaveOptionalParameters(): void
7979
self::bootKernel();
8080

8181
/** @var ComponentFactory $factory */
82-
$factory = self::$container->get(ComponentFactory::class);
82+
$factory = self::$container->get('ux.twig_component.component_factory');
8383

8484
/** @var ComponentC $component */
8585
$component = $factory->create('component_c', [
@@ -107,7 +107,7 @@ public function testExceptionThrownIfRequiredMountParameterIsMissingFromPassedDa
107107
self::bootKernel();
108108

109109
/** @var ComponentFactory $factory */
110-
$factory = self::$container->get(ComponentFactory::class);
110+
$factory = self::$container->get('ux.twig_component.component_factory');
111111

112112
$this->expectException(\LogicException::class);
113113
$this->expectExceptionMessage('Symfony\UX\TwigComponent\Tests\Fixture\Component\ComponentC::mount() has a required $propA parameter. Make sure this is passed or make give a default value.');
@@ -120,7 +120,7 @@ public function testExceptionThrownIfUnableToWritePassedDataToProperty(): void
120120
self::bootKernel();
121121

122122
/** @var ComponentFactory $factory */
123-
$factory = self::$container->get(ComponentFactory::class);
123+
$factory = self::$container->get('ux.twig_component.component_factory');
124124

125125
$this->expectException(\LogicException::class);
126126
$this->expectExceptionMessage('Unable to write "service" to component "Symfony\UX\TwigComponent\Tests\Fixture\Component\ComponentA". Make sure this is a writable property or create a mount() with a $service argument.');

0 commit comments

Comments
 (0)