Feature: #96688 - Attributes for Extbase Annotations
See forge#96688
Description
Since PHP 8, native attributes are supported. In comparison to doc comments, attributes have auto-completion, are better readable and were "invented" for storing meta-information about properties. For more info on attributes see https://stitcher.io/blog/attributes-in-php-8 and https://www.php.net/manual/en/language.attributes.overview.php
Extbase annotations are already nearly 1:1 translatable to attributes.
Impact
In addition to their usage as annotations, the following Extbase annotations have been enriched for usage as attributes:
@Extbase\ORM\Transient
@Extbase\ORM\Cascade
@Extbase\ORM\Lazy
@Extbase\IgnoreValidation
@Extbase\Validate
Copied!
Examples
Transient & Lazy
Annotations:
use TYPO3\CMS\Extbase\Annotation as Extbase;
/**
* @Extbase\ORM\Lazy()
* @Extbase\ORM\Transient()
*/
Copied!
Attributes:
use TYPO3\CMS\Extbase\Annotation as Extbase;
#[Extbase\ORM\Lazy()]
#[Extbase\ORM\Transient()]
Copied!
Cascade
Annotation:
/**
* @Extbase\ORM\Cascade("remove")
*/
Copied!
Attribute:
#[Extbase\ORM\Cascade(['value' => 'remove'])]
Copied!
Validate
Annotations:
/**
* @Extbase\Validate("StringLength", options={"minimum": 1, "maximum": 10})
* @Extbase\Validate("NotEmpty")
* @Extbase\Validate("TYPO3.CMS.Extbase:NotEmpty")
* @Extbase\Validate("TYPO3.CMS.Extbase.Tests.Unit.Reflection.Fixture:DummyValidator")
* @Extbase\Validate("\TYPO3\CMS\Extbase\Validation\Validator\NotEmptyValidator")
* @Extbase\Validate("TYPO3\CMS\Extbase\Validation\Validator\NotEmptyValidator")
*/
protected $propertyWithValidateAnnotations;
Copied!
Attributes:
#[Extbase\Validate(['validator' => 'StringLength', 'options' => ['minimum' => 1, 'maximum' => 10]])]
#[Extbase\Validate(['validator' => 'NotEmpty'])]
#[Extbase\Validate(['validator' => 'TYPO3.CMS.Extbase:NotEmpty'])]
#[Extbase\Validate(['validator' => 'TYPO3.CMS.Extbase.Tests.Unit.Reflection.Fixture:DummyValidator'])]
#[Extbase\Validate(['validator' => '\TYPO3\CMS\Extbase\Validation\Validator\NotEmptyValidator'])]
#[Extbase\Validate(['validator' => NotEmptyValidator::class])]
protected $propertyWithValidateAttributes;
Copied!
With promoted properties in constructor:
public function __construct(
#[Extbase\Validate(['validator' => 'StringLength', 'options' => ['minimum' => 1, 'maximum' => 10]])]
#[Extbase\Validate(['validator' => 'NotEmpty'])]
#[Extbase\Validate(['validator' => 'TYPO3.CMS.Extbase:NotEmpty'])]
#[Extbase\Validate(['validator' => 'TYPO3.CMS.Extbase.Tests.Unit.Reflection.Fixture:DummyValidator'])]
#[Extbase\Validate(['validator' => '\TYPO3\CMS\Extbase\Validation\Validator\NotEmptyValidator'])]
#[Extbase\Validate(['validator' => NotEmptyValidator::class])]
public readonly string $dummyPromotedProperty
)
{
// your code here
}
Copied!