Skip to content

Commit b2550d4

Browse files
committed
fix: do not overwrite existing values with route param values
1 parent 02fe150 commit b2550d4

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

src/Bag/Pipelines/Pipes/LaravelRouteParameters.php

+4
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ public function __invoke(BagInput $input): BagInput
2828
Reflection::getParameters(Reflection::getConstructor($input->bagClassname))->each(function ($parameter) use ($input) {
2929
/** @var ReflectionParameter $parameter */
3030

31+
if (isset($input->values[$parameter->getName()]) && $input->values[$parameter->getName()] !== null) {
32+
return;
33+
}
34+
3135
/** @var FromRouteParameter|FromRouteParameterProperty|null $attribute */
3236
$attribute = Reflection::getAttributeInstance($parameter, FromRouteParameter::class) ?? Reflection::getAttributeInstance($parameter, FromRouteParameterProperty::class);
3337
if ($attribute === null) {

tests/Unit/Pipelines/Pipes/LaravelRouteParametersTest.php

+12-2
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,16 @@
2727
->and($input->values->get('notNamedStringParam'))->toBe('testing');
2828
});
2929

30+
31+
test('it does not overwrite existing data', function () {
32+
$this->get('/string/testing');
33+
34+
$input = runPipeline(['stringParam' => 'existing', 'notNamedStringParam' => 'existing']);
35+
36+
expect($input->values->get('stringParam'))->toBe('existing')
37+
->and($input->values->get('notNamedStringParam'))->toBe('existing');
38+
});
39+
3040
test('it populates int parameter value', function () {
3141
$this->get('/int/1234');
3242

@@ -133,9 +143,9 @@
133143
->and($input->values->get('notNamedStringParam'))->toBe('overridden');
134144
});
135145

136-
function runPipeline(): BagInput
146+
function runPipeline($data = []): BagInput
137147
{
138-
$input = new BagInput(BagWithRequestParams::class, collect());
148+
$input = new BagInput(BagWithRequestParams::class, collect($data));
139149

140150
$input = (new ProcessParameters())($input);
141151
$input = (new MapInput())($input);

0 commit comments

Comments
 (0)