Bug #93911
openCannot strong-type properties when extending a domain model
0%
Description
In the context of using Configuration/Extbase/Persistence/Classes.php
, Extbase allows to extend a domain model, e.g.:
namespace VENDOR\MyExt\Domain\Model; class User extends FrontendUser { /** * @var string */ protected $courseStudy; // getter/setter
Corresponding definition looks like:
return [ \TYPO3\CMS\Extbase\Domain\Model\FrontendUser::class => [ 'tableName' => 'fe_users', 'recordType' => '\TYPO3\CMS\Extbase\Domain\Model\FrontendUser', 'subclasses' => [ 'Tx_MyExt_User' => \VENDOR\MyExt\Domain\Model\User::class, ] ], \VENDOR\MyExt\Domain\Model\User::class => [ 'tableName' => 'fe_users', 'properties' => [ 'courseStudy' => [ 'fieldName' => 'tx_myext_course_study' ], ], ], ];
This way the mapping just works fine!
However if you strong type the property, then it doesn't work anymore:
namespace VENDOR\MyExt\Domain\Model; class User extends FrontendUser { /** * @var string */ protected string $courseStudy; // getter/setter
(mind the protected string
).
Updated by Guido Schmechel about 3 years ago
We also had problems with the extbase persistence classes today. It was not so much the string notation, but we were still missing a TCA passthrough to the name of the original field.
Updated by Christian Kuhn almost 3 years ago
- Status changed from New to Closed
This does not work on PHP level. This is invalid:
class foo {
protected $foo;
}
class bar extends foo {
protected string $foo;
}
Quoting https://wiki.php.net/rfc/typed_properties_v2:
"Property types are invariant. This means that the type of a (non-private) property is not allowed to change during inheritance (this includes adding or removing property types). If the parent property is private, then the type may be changed arbitrarily.
[...]
As such, neither contravariance nor covariance are applicable to property types.
"
Updated by Xavier Perseguers almost 3 years ago
- Status changed from Closed to New
This was not about overriding an existing property but adding another property.
Updated by Benni Mack 5 months ago
- Status changed from New to Needs Feedback
Xavier Perseguers wrote in #note-3:
This was not about overriding an existing property but adding another property.
Hey Xavier,
this works for me in v12 installation (extending EXT:news). Does it work for you in v11+ ?