Skip to content

Commit 2dc8b53

Browse files
committed
QueryStringPropsExtractor, renamed to RequestPropsExtractor shall get props also from path. RequestInitializeSubscriber also renamed
1 parent f4233de commit 2dc8b53

File tree

5 files changed

+19
-18
lines changed

5 files changed

+19
-18
lines changed

src/LiveComponent/src/DependencyInjection/LiveComponentExtension.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
use Symfony\UX\LiveComponent\EventListener\InterceptChildComponentRenderSubscriber;
3535
use Symfony\UX\LiveComponent\EventListener\LiveComponentSubscriber;
3636
use Symfony\UX\LiveComponent\EventListener\LiveUrlSubscriber;
37-
use Symfony\UX\LiveComponent\EventListener\QueryStringInitializeSubscriber;
37+
use Symfony\UX\LiveComponent\EventListener\RequestInitializeSubscriber;
3838
use Symfony\UX\LiveComponent\EventListener\ResetDeterministicIdSubscriber;
3939
use Symfony\UX\LiveComponent\Form\Type\LiveCollectionType;
4040
use Symfony\UX\LiveComponent\Hydration\HydrationExtensionInterface;
@@ -51,8 +51,8 @@
5151
use Symfony\UX\LiveComponent\Util\FingerprintCalculator;
5252
use Symfony\UX\LiveComponent\Util\LiveComponentStack;
5353
use Symfony\UX\LiveComponent\Util\LiveControllerAttributesCreator;
54-
use Symfony\UX\LiveComponent\Util\QueryStringPropsExtractor;
5554
use Symfony\UX\LiveComponent\Util\TwigAttributeHelperFactory;
55+
use Symfony\UX\LiveComponent\Util\RequestPropsExtractor;
5656
use Symfony\UX\TwigComponent\ComponentFactory;
5757
use Symfony\UX\TwigComponent\ComponentRenderer;
5858

@@ -231,12 +231,12 @@ function (ChildDefinition $definition, AsLiveComponent $attribute) {
231231
->addTag('container.service_subscriber', ['key' => LiveControllerAttributesCreator::class, 'id' => 'ux.live_component.live_controller_attributes_creator'])
232232
;
233233

234-
$container->register('ux.live_component.query_string_props_extractor', QueryStringPropsExtractor::class)
234+
$container->register('ux.live_component.query_string_props_extractor', RequestPropsExtractor::class)
235235
->setArguments([
236236
new Reference('ux.live_component.component_hydrator'),
237237
]);
238238

239-
$container->register('ux.live_component.query_string_initializer_subscriber', QueryStringInitializeSubscriber::class)
239+
$container->register('ux.live_component.query_string_initializer_subscriber', RequestInitializeSubscriber::class)
240240
->setArguments([
241241
new Reference('request_stack'),
242242
new Reference('ux.live_component.metadata_factory'),

src/LiveComponent/src/EventListener/QueryStringInitializeSubscriber.php renamed to src/LiveComponent/src/EventListener/RequestInitializeSubscriber.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,20 @@
1616
use Symfony\Component\PropertyAccess\Exception\ExceptionInterface as PropertyAccessExceptionInterface;
1717
use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
1818
use Symfony\UX\LiveComponent\Metadata\LiveComponentMetadataFactory;
19-
use Symfony\UX\LiveComponent\Util\QueryStringPropsExtractor;
19+
use Symfony\UX\LiveComponent\Util\RequestPropsExtractor;
2020
use Symfony\UX\TwigComponent\Event\PostMountEvent;
2121

2222
/**
2323
* @author Nicolas Rigaud <squrious@protonmail.com>
2424
*
2525
* @internal
2626
*/
27-
class QueryStringInitializeSubscriber implements EventSubscriberInterface
27+
class RequestInitializeSubscriber implements EventSubscriberInterface
2828
{
2929
public function __construct(
3030
private readonly RequestStack $requestStack,
3131
private readonly LiveComponentMetadataFactory $metadataFactory,
32-
private readonly QueryStringPropsExtractor $queryStringPropsExtractor,
32+
private readonly RequestPropsExtractor $requestPropsExtractor,
3333
private readonly PropertyAccessorInterface $propertyAccessor,
3434
) {
3535
}
@@ -60,11 +60,11 @@ public function onPostMount(PostMountEvent $event): void
6060
return;
6161
}
6262

63-
$queryStringData = $this->queryStringPropsExtractor->extract($request, $metadata, $event->getComponent());
63+
$requestData = $this->requestPropsExtractor->extract($request, $metadata, $event->getComponent());
6464

6565
$component = $event->getComponent();
6666

67-
foreach ($queryStringData as $name => $value) {
67+
foreach ($requestData as $name => $value) {
6868
try {
6969
$this->propertyAccessor->setValue($component, $name, $value);
7070
} catch (PropertyAccessExceptionInterface $exception) {

src/LiveComponent/src/Util/QueryStringPropsExtractor.php renamed to src/LiveComponent/src/Util/RequestPropsExtractor.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,28 +22,29 @@
2222
*
2323
* @internal
2424
*/
25-
final class QueryStringPropsExtractor
25+
final class RequestPropsExtractor
2626
{
2727
public function __construct(private readonly LiveComponentHydrator $hydrator)
2828
{
2929
}
3030

3131
/**
32-
* Extracts relevant query parameters from the current URL and hydrates them.
32+
* Extracts relevant props parameters from the current URL and hydrates them.
3333
*/
3434
public function extract(Request $request, LiveComponentMetadata $metadata, object $component): array
3535
{
36-
$query = $request->query->all();
36+
$parameters = array_merge($request->attributes->all(), $request->query->all());
3737

38-
if (empty($query)) {
38+
// @todo never empty because custom values prefixed with _ ... do something ?
39+
if (empty($parameters)) {
3940
return [];
4041
}
4142
$data = [];
4243

4344
foreach ($metadata->getAllLivePropsMetadata($component) as $livePropMetadata) {
4445
if ($queryMapping = $livePropMetadata->urlMapping()) {
4546
$frontendName = $livePropMetadata->calculateFieldName($component, $livePropMetadata->getName());
46-
if (null !== ($value = $query[$queryMapping->as ?? $frontendName] ?? null)) {
47+
if (null !== ($value = $parameters[$queryMapping->as ?? $frontendName] ?? null)) {
4748
if ('' === $value && null !== $livePropMetadata->getType() && (!$livePropMetadata->isBuiltIn() || 'array' === $livePropMetadata->getType())) {
4849
// Cast empty string to empty array for objects and arrays
4950
$value = [];

src/LiveComponent/tests/Functional/EventListener/QueryStringInitializerSubscriberTest.php renamed to src/LiveComponent/tests/Functional/EventListener/RequestInitializerSubscriberTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
1515
use Zenstruck\Browser\Test\HasBrowser;
1616

17-
class QueryStringInitializerSubscriberTest extends KernelTestCase
17+
class RequestInitializerSubscriberTest extends KernelTestCase
1818
{
1919
use HasBrowser;
2020

src/LiveComponent/tests/Functional/Util/QueryStringPropsExtractorTest.php renamed to src/LiveComponent/tests/Functional/Util/RequestPropsExtractorTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
use Symfony\UX\LiveComponent\Metadata\LiveComponentMetadataFactory;
1717
use Symfony\UX\LiveComponent\Tests\Fixtures\Dto\Address;
1818
use Symfony\UX\LiveComponent\Tests\LiveComponentTestHelper;
19-
use Symfony\UX\LiveComponent\Util\QueryStringPropsExtractor;
19+
use Symfony\UX\LiveComponent\Util\RequestPropsExtractor;
2020

21-
class QueryStringPropsExtractorTest extends KernelTestCase
21+
class RequestPropsExtractorTest extends KernelTestCase
2222
{
2323
use LiveComponentTestHelper;
2424

@@ -27,7 +27,7 @@ class QueryStringPropsExtractorTest extends KernelTestCase
2727
*/
2828
public function testExtract(string $queryString, array $expected)
2929
{
30-
$extractor = new QueryStringPropsExtractor($this->hydrator());
30+
$extractor = new RequestPropsExtractor($this->hydrator());
3131

3232
$request = Request::create('/'.!empty($queryString) ? '?'.$queryString : '');
3333

0 commit comments

Comments
 (0)