Attention
TYPO3 v8 has reached its end-of-life March 31st, 2020 and is not maintained by the community anymore. Looking for a stable version? Use the version switch on the top left.
You can order Extended Long Term Support (ELTS) here: TYPO3 ELTS.
Last Update 01 Feb 2016.
Property Mapper¶
Extbase provides a Property Mapper to convert different values, like integers or arrays, to other types, like strings or object. In this example, we provide a string that will be converted to an integer:
$output = $this->objectManager->get(\TYPO3\CMS\Extbase\Property\PropertyMapper::class)
->convert('10', 'integer');
Conversion is done by using the TYPO3\CMS\Extbase\Property\PropertyMapper::convert()
method.
How to use property mapper¶
The above example was a really simple one. Most of the time you will convert from an array to an where some points must be considered. This example will show a simple conversation:
$input = [
'username' => 'This is the user name',
];
$output = $this->objectManager->get(\TYPO3\CMS\Extbase\Property\PropertyMapper::class)
->convert(
$input,
'TYPO3\CMS\Extbase\Domain\Model\FrontendUser'
);
The result will be a new instance of TYPO3\CMS\Extbase\Domain\Model\FrontendUser
with defined property username
.
Note
The property mapper won't check validation rules. The result will be whatever the input is.
Allow mapping of sub-properties¶
It's also possible to map to subtypes. In the above example, the FrontendUser
has a sub-property
of type TYPO3\CMS\Extbase\Domain\Model\FrontendUserGroup
. If you wanna map an incoming id,
you have to configure the mapper as per default he won't map sub properties for security reasons:
$input = [
'username' => 'This is the user name',
'usergroup' => [
1,
],
];
// Get property mapping configuration
$mappingConfiguration = $this->objectManager
->get('TYPO3\CMS\Extbase\Property\PropertyMappingConfigurationBuilder')
->build();
// Adjust configuration to allow mapping of sub property 'usergroup'
$mappingConfiguration->forProperty('usergroup')
->allowAllProperties();
$output = $this->objectManager->get(\TYPO3\CMS\Extbase\Property\PropertyMapper::class)
->convert(
$input,
'TYPO3\CMS\Extbase\Domain\Model\FrontendUser',
$mappingConfiguration
);