diff --git a/typo3/sysext/extbase/Classes/Mvc/Controller/Argument.php b/typo3/sysext/extbase/Classes/Mvc/Controller/Argument.php index c0c88d183820..cea4bc081cb4 100644 --- a/typo3/sysext/extbase/Classes/Mvc/Controller/Argument.php +++ b/typo3/sysext/extbase/Classes/Mvc/Controller/Argument.php @@ -273,6 +273,7 @@ public function setValue($rawValue) } } $this->validationResults->merge($this->propertyMapper->getMessages()); + $this->propertyMapper->resetMessages(); return $this; } diff --git a/typo3/sysext/extbase/Classes/Property/PropertyMapper.php b/typo3/sysext/extbase/Classes/Property/PropertyMapper.php index c83b52254817..1cc653e925da 100644 --- a/typo3/sysext/extbase/Classes/Property/PropertyMapper.php +++ b/typo3/sysext/extbase/Classes/Property/PropertyMapper.php @@ -91,6 +91,7 @@ public function injectConfigurationBuilder(PropertyMappingConfigurationBuilder $ */ public function initializeObject() { + $this->resetMessages(); foreach ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['typeConverters'] as $typeConverterClassName) { $typeConverter = $this->objectManager->get($typeConverterClassName); foreach ($typeConverter->getSupportedSourceTypes() as $supportedSourceType) { @@ -117,7 +118,6 @@ public function convert($source, $targetType, PropertyMappingConfigurationInterf $configuration = $this->configurationBuilder->build(); } $currentPropertyPath = []; - $this->messages = new Result(); try { $result = $this->doMapping($source, $targetType, $configuration, $currentPropertyPath); if ($result instanceof Error) { @@ -133,7 +133,7 @@ public function convert($source, $targetType, PropertyMappingConfigurationInterf } /** - * Get the messages of the last Property Mapping + * Get the messages of the last Property Mapping. * * @return \TYPO3\CMS\Extbase\Error\Result */ @@ -142,6 +142,14 @@ public function getMessages() return $this->messages; } + /** + * Resets the messages of the last Property Mapping. + */ + public function resetMessages(): void + { + $this->messages = new Result(); + } + /** * Internal function which actually does the property mapping. * diff --git a/typo3/sysext/extbase/Tests/Functional/Property/TypeConverter/DateTimeConverterTest.php b/typo3/sysext/extbase/Tests/Functional/Property/TypeConverter/DateTimeConverterTest.php index d0e0acdaf8e6..347551e17ce0 100644 --- a/typo3/sysext/extbase/Tests/Functional/Property/TypeConverter/DateTimeConverterTest.php +++ b/typo3/sysext/extbase/Tests/Functional/Property/TypeConverter/DateTimeConverterTest.php @@ -31,14 +31,14 @@ class DateTimeConverterTest extends FunctionalTestCase public function convertFromReturnsAnErrorWhenConvertingIntegersToDateTime() { $propertyMapper = $this->getContainer()->get(PropertyMapper::class); - $dateTime = $propertyMapper->convert(0, \DateTime::class); self::assertNull($dateTime); - self::assertTrue($propertyMapper->getMessages()->hasErrors()); + $messages = $propertyMapper->getMessages(); + self::assertTrue($messages->hasErrors()); self::assertSame( 'The date "%s" was not recognized (for format "%s").', - $propertyMapper->getMessages()->getFirstError()->getMessage() + $messages->getFirstError()->getMessage() ); } @@ -304,10 +304,11 @@ public function convertFromReturnsErrorIfSourceIsAnArrayAndEitherDayMonthOrYearA ); self::assertNull($dateTime); - self::assertTrue($propertyMapper->getMessages()->hasErrors()); + $messages = $propertyMapper->getMessages(); + self::assertTrue($messages->hasErrors()); self::assertSame( 'Could not convert the given date parts into a DateTime object because one or more parts were 0.', - $propertyMapper->getMessages()->getFirstError()->getMessage() + $messages->getFirstError()->getMessage() ); } diff --git a/typo3/sysext/form/Classes/Mvc/ProcessingRule.php b/typo3/sysext/form/Classes/Mvc/ProcessingRule.php index cb339bcd60cf..b623c11c79c0 100644 --- a/typo3/sysext/form/Classes/Mvc/ProcessingRule.php +++ b/typo3/sysext/form/Classes/Mvc/ProcessingRule.php @@ -168,6 +168,7 @@ public function process($value) if ($this->dataType !== null) { $value = $this->propertyMapper->convert($value, $this->dataType, $this->propertyMappingConfiguration); $messages = $this->propertyMapper->getMessages(); + $this->propertyMapper->resetMessages(); } else { $messages = GeneralUtility::makeInstance(ObjectManager::class) ->get(Result::class);