Skip to content

Commit f342511

Browse files
Merge pull request #22 from weierophinney/feature/php-8.2-support
Drop PHP 7 support, add PHP 8.2 support
2 parents e7f3a71 + 963c6ec commit f342511

8 files changed

Lines changed: 987 additions & 998 deletions

composer.json

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,29 @@
1818
"forum": "https://discourse.laminas.dev"
1919
},
2020
"config": {
21-
"sort-packages": true
21+
"sort-packages": true,
22+
"allow-plugins": {
23+
"dealerdirect/phpcodesniffer-composer-installer": true
24+
},
25+
"platform": {
26+
"php": "8.0.99"
27+
}
2228
},
2329
"extra": {
2430
"laminas": {
2531
"module": "Laminas\\ApiTools\\ContentValidation"
2632
}
2733
},
2834
"require": {
29-
"php": "^7.3 || ~8.0.0 || ~8.1.0",
30-
"laminas-api-tools/api-tools-api-problem": "^1.3.0",
31-
"laminas-api-tools/api-tools-content-negotiation": "^1.5.0",
35+
"php": "~8.0.0 || ~8.1.0 || ~8.2.0",
36+
"laminas-api-tools/api-tools-api-problem": "^1.6",
37+
"laminas-api-tools/api-tools-content-negotiation": "^1.8",
3238
"laminas/laminas-eventmanager": "^2.6.3 || ^3.0.1",
3339
"laminas/laminas-filter": "^2.7.1",
3440
"laminas/laminas-http": "^2.5.4",
3541
"laminas/laminas-inputfilter": "^2.8",
3642
"laminas/laminas-mvc": "^2.7.15 || ^3.0.4",
37-
"laminas/laminas-servicemanager": "^2.7.6 || ^3.1",
43+
"laminas/laminas-servicemanager": "^3.11",
3844
"laminas/laminas-stdlib": "^3.2.1",
3945
"laminas/laminas-validator": "^2.8.1",
4046
"laminas/laminas-zendframework-bridge": "^1.0"

composer.lock

Lines changed: 953 additions & 886 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

psalm-baseline.xml

Lines changed: 14 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,24 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<files psalm-version="4.7.3@38c452ae584467e939d55377aaf83b5a26f19dd1">
2+
<files psalm-version="4.30.0@d0bc6e25d89f649e4f36a534f330f8bb4643dd69">
33
<file src="src/ContentValidationListener.php">
4-
<DocblockTypeContradiction occurrences="2">
5-
<code>! $this-&gt;inputFilterManager</code>
6-
<code>$this-&gt;events</code>
7-
</DocblockTypeContradiction>
84
<ImplementedReturnTypeMismatch occurrences="1">
95
<code>ContentValidationListener</code>
106
</ImplementedReturnTypeMismatch>
7+
<InvalidNullableReturnType occurrences="1">
8+
<code>EventManagerInterface</code>
9+
</InvalidNullableReturnType>
1110
<MissingClosureParamType occurrences="2">
1211
<code>$key</code>
1312
<code>$value</code>
1413
</MissingClosureParamType>
15-
<MissingClosureReturnType occurrences="1">
16-
<code>function ($value, $key = null) use ($compareTo) {</code>
17-
</MissingClosureReturnType>
18-
<MissingReturnType occurrences="1">
19-
<code>addMethodWithoutBody</code>
20-
</MissingReturnType>
2114
<MixedArgument occurrences="3">
2215
<code>$key</code>
2316
<code>$method</code>
2417
<code>$subData</code>
2518
</MixedArgument>
19+
<MixedArgumentTypeCoercion occurrences="1">
20+
<code>$validationGroup</code>
21+
</MixedArgumentTypeCoercion>
2622
<MixedArrayAccess occurrences="2">
2723
<code>$this-&gt;config[$controllerService][$method . '_COLLECTION']</code>
2824
<code>$this-&gt;config[$controllerService]['input_filter']</code>
@@ -43,18 +39,15 @@
4339
<code>$this-&gt;config[$controllerService]['input_filter']</code>
4440
<code>$this-&gt;inputFilters[$inputFilterService]</code>
4541
</MixedReturnStatement>
42+
<NullableReturnStatement occurrences="1">
43+
<code>$this-&gt;events</code>
44+
</NullableReturnStatement>
4645
<ParamNameMismatch occurrences="1">
4746
<code>$events</code>
4847
</ParamNameMismatch>
4948
<PossiblyInvalidArgument occurrences="1">
5049
<code>$data</code>
5150
</PossiblyInvalidArgument>
52-
<PossiblyNullPropertyAssignmentValue occurrences="1">
53-
<code>$inputFilterManager</code>
54-
</PossiblyNullPropertyAssignmentValue>
55-
<PropertyNotSetInConstructor occurrences="1">
56-
<code>$events</code>
57-
</PropertyNotSetInConstructor>
5851
<UndefinedClass occurrences="1">
5952
<code>V2RouteMatch</code>
6053
</UndefinedClass>
@@ -104,9 +97,6 @@
10497
<DeprecatedInterface occurrences="1">
10598
<code>NoRecordExistsFactory</code>
10699
</DeprecatedInterface>
107-
<MissingReturnType occurrences="1">
108-
<code>setCreationOptions</code>
109-
</MissingReturnType>
110100
<MixedArgument occurrences="2">
111101
<code>$container</code>
112102
<code>$options['adapter']</code>
@@ -125,9 +115,6 @@
125115
<DeprecatedInterface occurrences="1">
126116
<code>RecordExistsFactory</code>
127117
</DeprecatedInterface>
128-
<MissingReturnType occurrences="1">
129-
<code>setCreationOptions</code>
130-
</MissingReturnType>
131118
<MixedArgument occurrences="2">
132119
<code>$container</code>
133120
<code>$options['adapter']</code>
@@ -143,65 +130,10 @@
143130
</UndefinedInterfaceMethod>
144131
</file>
145132
<file src="test/ContentValidationListenerTest.php">
146-
<MissingReturnType occurrences="57">
147-
<code>testAddCustomMethods</code>
148-
<code>testAllowsValidationOfPartialSetsForPatchRequests</code>
149-
<code>testApiProblemResponseFromInvalidContentContainsValidationErrorMessages</code>
150-
<code>testApiProblemResponseFromInvalidContentHas422Status</code>
151-
<code>testAttachesToRouteEventAtLowPriority</code>
152-
<code>testCanFetchHttpMethodSpecificInputFilterWhenValidating</code>
153-
<code>testCanValidateCollections</code>
154-
<code>testCanValidatePostedCollections</code>
155-
<code>testCollectionDeleteRequestWithBody</code>
156-
<code>testDeleteRequestWithBody</code>
157-
<code>testDoesNotAttemptToValidateAnEntityAsACollection</code>
158-
<code>testEmptyPostShouldReturnValidationError</code>
159-
<code>testEventNameShouldBeResetToOriginalOnCompletionOfListener</code>
160-
<code>testFailsValidationOfPartialSetsForPatchRequestsThatIncludeBlankFieldNames</code>
161-
<code>testFilterEmptyEntriesFromDataByOptionWhenDataEmpty</code>
162-
<code>testFilterEmptyEntriesFromDataByOptionWhenValueBooleanNotInComparison</code>
163-
<code>testFilterEmptyEntriesFromDataByOptionWhenValueEmptyAfterFilter</code>
164-
<code>testFilterEmptyEntriesFromDataByOptionWhenValueNotAnArray</code>
165-
<code>testFilterEmptyEntriesFromDataByOptionWithNestedData</code>
166-
<code>testIndicatesInvalidPostedEntityWhenCollectionIsPossibleForService</code>
167-
<code>testInputFilterIsInjectedIntoMvcEvent</code>
168-
<code>testInvalidValidationGroupIs400Response</code>
169-
<code>testMergesFilesArrayIntoDataPriorToValidationWhenFilesArrayIsPopulated</code>
170-
<code>testMissingContentNegotiationDataHas500Response</code>
171-
<code>testPatchWithZeroRouteIdDoesNotEmitANoticeAndDoesNotHaveCollectionInputFilterWhenRequestHasABody</code>
172-
<code>testPatchWithZeroRouteIdWithNoRequestBodyDoesNotHaveCollectionInputFilter</code>
173-
<code>testRemoveEmptyDataIsNotSetSoEmptyDataAreNotRemoved</code>
174-
<code>testReportsValidationFailureForPostedCollection</code>
175-
<code>testReturnsApiProblemResponseForCollectionIfAnyFieldsAreInvalid</code>
176-
<code>testReturnsApiProblemResponseIfCollectionRequestWithoutBodyIsInvalidAndUnknownFieldsAreDisallowed</code>
177-
<code>testReturnsApiProblemResponseIfEntityRequestWithoutBodyIsInvalidAndUnknownFieldsAreDisallowed</code>
178-
<code>testReturnsApiProblemResponseIfInputFilterServiceIsInvalid</code>
179-
<code>testReturnsEarlyIfControllerServiceIsNotInConfig</code>
180-
<code>testReturnsEarlyIfNoRouteMatchesPresent</code>
181-
<code>testReturnsEarlyIfRequestIsNonHttp</code>
182-
<code>testReturnsEarlyIfRequestMethodWillNotContainRequestBody</code>
183-
<code>testReturnsEarlyIfRouteMatchesDoNotContainControllerService</code>
184-
<code>testReturnsNothingOnDeleteRequestIfContentIsInValidAndValidationSetViaInputFilterKeyword</code>
185-
<code>testReturnsNullIfCollectionRequestWithoutBodyIsValid</code>
186-
<code>testReturnsNullIfCollectionRequestWithoutBodyIsValidAndUndefinedFieldsAreAllowed</code>
187-
<code>testReturnsNullIfEntityRequestWithoutBodyIsValid</code>
188-
<code>testReturnsNullIfEntityRequestWithoutBodyIsValidAndUndefinedFieldsAreAllowed</code>
189-
<code>testSaveFilteredDataIntoDataContainer</code>
190-
<code>testSaveRawDataIntoDataContainer</code>
191-
<code>testSaveUnknownDataWhenEmptyInputFilter</code>
192-
<code>testSeparateCollectionInputFilterValidation</code>
193-
<code>testShouldSaveFilteredDataWhenRequiredEvenIfInputFilterIsNotUnknownInputsCapable</code>
194-
<code>testTriggeredEventBeforeValidate</code>
195-
<code>testTriggeredEventBeforeValidateReturnsApiProblemResponseFromApiProblem</code>
196-
<code>testTriggeredEventBeforeValidateReturnsApiProblemResponseFromCallback</code>
197-
<code>testTrySaveUnknownData</code>
198-
<code>testUnknownDataMustBeMergedWithFilteredData</code>
199-
<code>testUseRawAndAllowOnlyFieldsInFilterData</code>
200-
<code>testValidatePostedCollectionsAndAllowedOnlyFieldsFromFilterReturnsApiProblemWithUnrecognizedFields</code>
201-
<code>testValidatesPatchToCollectionWhenFieldMissing</code>
202-
<code>testValidatesPostedEntityWhenCollectionIsPossibleForService</code>
203-
<code>testWhenNoFieldsAreDefinedAndValidatorPassesIndexedArrayDataShouldNotBeDuplicated</code>
204-
</MissingReturnType>
133+
<InvalidArgument occurrences="47">
134+
<code>[]</code>
135+
<code>[]</code>
136+
</InvalidArgument>
205137
<MixedArgument occurrences="25">
206138
<code>$apiProblemData['detail']</code>
207139
<code>$asArray['validation_messages']</code>
@@ -332,16 +264,8 @@
332264
<code>$matches</code>
333265
<code>V2RouteMatch|RouteMatch</code>
334266
</UndefinedDocblockClass>
335-
<UnusedVariable occurrences="1">
336-
<code>$factory</code>
337-
</UnusedVariable>
338267
</file>
339268
<file src="test/InputFilter/InputFilterPluginTest.php">
340-
<MissingReturnType occurrences="3">
341-
<code>testInvalidTypeInEventInputFilterParamCausesPluginToYieldNull</code>
342-
<code>testMissingInputFilterParamInEventCausesPluginToYieldNull</code>
343-
<code>testValidInputFilterInEventIsReturnedByPlugin</code>
344-
</MissingReturnType>
345269
<MixedMethodCall occurrences="5">
346270
<code>__invoke</code>
347271
<code>__invoke</code>
@@ -365,10 +289,6 @@
365289
<InvalidPropertyAssignmentValue occurrences="1">
366290
<code>$this-&gt;prophesize(Adapter::class)-&gt;reveal()</code>
367291
</InvalidPropertyAssignmentValue>
368-
<MissingReturnType occurrences="2">
369-
<code>testCreateValidatorWithAdapter</code>
370-
<code>testCreateValidatorWithoutAdapter</code>
371-
</MissingReturnType>
372292
<MixedArgument occurrences="1">
373293
<code>$config['validators']</code>
374294
</MixedArgument>
@@ -386,10 +306,6 @@
386306
<InvalidPropertyAssignmentValue occurrences="1">
387307
<code>$this-&gt;prophesize(Adapter::class)-&gt;reveal()</code>
388308
</InvalidPropertyAssignmentValue>
389-
<MissingReturnType occurrences="2">
390-
<code>testCreateValidatorWithAdapter</code>
391-
<code>testCreateValidatorWithoutAdapter</code>
392-
</MissingReturnType>
393309
<MixedArgument occurrences="1">
394310
<code>$config['validators']</code>
395311
</MixedArgument>

psalm.xml.dist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0"?>
22
<psalm
3-
totallyTyped="true"
3+
errorLevel="1"
44
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
55
xmlns="https://getpsalm.org/schema/config"
66
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"

src/ContentValidationListener.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,10 @@ class ContentValidationListener implements ListenerAggregateInterface, EventMana
4747
/** @var array */
4848
protected $config = [];
4949

50-
/** @var EventManagerInterface */
50+
/** @var null|EventManagerInterface */
5151
protected $events;
5252

53-
/** @var ServiceLocatorInterface */
53+
/** @var null|ServiceLocatorInterface */
5454
protected $inputFilterManager;
5555

5656
/**
@@ -125,7 +125,7 @@ public function setEventManager(EventManagerInterface $events)
125125
*/
126126
public function getEventManager()
127127
{
128-
if (! $this->events) {
128+
if (null === $this->events) {
129129
$this->setEventManager(new EventManager());
130130
}
131131
return $this->events;
@@ -418,7 +418,7 @@ protected function removeEmptyData(array $data, array $compareTo = [])
418418
return null !== $value;
419419
};
420420

421-
$data = array_filter($data, $removeNull, ARRAY_FILTER_USE_BOTH);
421+
$data = array_filter($data, $removeNull, ARRAY_FILTER_USE_BOTH);
422422

423423
if (empty($data)) {
424424
return $data;
@@ -505,7 +505,7 @@ protected function hasInputFilter($inputFilterService)
505505
}
506506

507507
if (
508-
! $this->inputFilterManager
508+
null === $this->inputFilterManager
509509
|| ! $this->inputFilterManager->has($inputFilterService)
510510
) {
511511
return false;

src/ContentValidationListenerFactory.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
namespace Laminas\ApiTools\ContentValidation;
66

7-
use Interop\Container\ContainerInterface;
87
use Laminas\ServiceManager\FactoryInterface;
98
use Laminas\ServiceManager\ServiceLocatorInterface;
9+
use Psr\Container\ContainerInterface;
1010

1111
class ContentValidationListenerFactory implements FactoryInterface
1212
{

src/Validator/Db/NoRecordExistsFactory.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
namespace Laminas\ApiTools\ContentValidation\Validator\Db;
66

7-
use Interop\Container\ContainerInterface;
87
use Laminas\ServiceManager\FactoryInterface;
98
use Laminas\ServiceManager\ServiceLocatorInterface;
109
use Laminas\Stdlib\ArrayUtils;
1110
use Laminas\Validator\Db\NoRecordExists;
11+
use Psr\Container\ContainerInterface;
1212

1313
class NoRecordExistsFactory implements FactoryInterface
1414
{

src/Validator/Db/RecordExistsFactory.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
namespace Laminas\ApiTools\ContentValidation\Validator\Db;
66

7-
use Interop\Container\ContainerInterface;
87
use Laminas\ServiceManager\FactoryInterface;
98
use Laminas\ServiceManager\ServiceLocatorInterface;
109
use Laminas\Stdlib\ArrayUtils;
1110
use Laminas\Validator\Db\RecordExists;
11+
use Psr\Container\ContainerInterface;
1212

1313
class RecordExistsFactory implements FactoryInterface
1414
{

0 commit comments

Comments
 (0)