diff --git a/src/Api/DataTransformer/Attendance/AttendanceInputDataTransformer.php b/src/Api/DataTransformer/Attendance/AttendanceInputDataTransformer.php index 3fe57c61..1f027452 100644 --- a/src/Api/DataTransformer/Attendance/AttendanceInputDataTransformer.php +++ b/src/Api/DataTransformer/Attendance/AttendanceInputDataTransformer.php @@ -5,7 +5,7 @@ namespace App\Api\DataTransformer\Attendance; use ApiPlatform\Core\DataTransformer\DataTransformerInterface; -use ApiPlatform\Core\Validator\ValidatorInterface; +use ApiPlatform\Validator\ValidatorInterface; use App\Api\Input\Attendance\AttendanceInput; use App\Entity\Attendance\Attendance; use Ramsey\Uuid\Uuid; diff --git a/src/Api/Input/Attendance/AttendanceInput.php b/src/Api/Input/Attendance/AttendanceInput.php index 8450b32c..2647ccc3 100644 --- a/src/Api/Input/Attendance/AttendanceInput.php +++ b/src/Api/Input/Attendance/AttendanceInput.php @@ -8,21 +8,15 @@ use App\Validator\SteamProfileId; use Symfony\Component\Validator\Constraints as Assert; -/** - * @UniqueAttendance - */ +#[UniqueAttendance] class AttendanceInput { - /** - * @Assert\NotBlank - * @Assert\Length(max=255) - */ + #[Assert\NotBlank] + #[Assert\Length(max: 255)] protected ?string $missionId = null; - /** - * @Assert\NotBlank - * @SteamProfileId - */ + #[Assert\NotBlank] + #[SteamProfileId] protected ?int $playerId = null; public function getMissionId(): ?string diff --git a/src/Form/Dlc/Dto/DlcFormDto.php b/src/Form/Dlc/Dto/DlcFormDto.php index 944ce7fa..e56695f1 100644 --- a/src/Form/Dlc/Dto/DlcFormDto.php +++ b/src/Form/Dlc/Dto/DlcFormDto.php @@ -12,31 +12,23 @@ use Ramsey\Uuid\UuidInterface; use Symfony\Component\Validator\Constraints as Assert; -/** - * @SteamStoreArma3DlcUrl(errorPath="url") - * @UniqueSteamStoreDlc - * @UniqueDirectoryDlc - */ +#[SteamStoreArma3DlcUrl(errorPath: 'url')] +#[UniqueSteamStoreDlc] +#[UniqueDirectoryDlc] class DlcFormDto extends AbstractFormDto { protected ?UuidInterface $id = null; - /** - * @Assert\Length(max=255) - */ + #[Assert\Length(max: 255)] protected ?string $name = null; - /** - * @Assert\Length(min=1, max=255) - */ + #[Assert\Length(min: 1, max: 255)] protected ?string $description = null; protected ?string $url = null; - /** - * @Assert\NotBlank - * @WindowsDirectoryName - */ + #[Assert\NotBlank] + #[WindowsDirectoryName] protected ?string $directory = null; public function getId(): ?UuidInterface diff --git a/src/Form/Mod/Dto/ModFormDto.php b/src/Form/Mod/Dto/ModFormDto.php index b33085e7..c04bd2b0 100644 --- a/src/Form/Mod/Dto/ModFormDto.php +++ b/src/Form/Mod/Dto/ModFormDto.php @@ -13,52 +13,34 @@ use Ramsey\Uuid\UuidInterface; use Symfony\Component\Validator\Constraints as Assert; -/** - * @UniqueSteamWorkshopMod(groups={ModSourceEnum::STEAM_WORKSHOP}) - * @SteamWorkshopArma3ModUrl(groups={ModSourceEnum::STEAM_WORKSHOP}, errorPath="url", nameErrorPath="name") - * @UniqueDirectoryMod(groups={ModSourceEnum::DIRECTORY}) - */ +#[UniqueSteamWorkshopMod(groups: [ModSourceEnum::STEAM_WORKSHOP])] +#[SteamWorkshopArma3ModUrl(groups: [ModSourceEnum::STEAM_WORKSHOP], errorPath: 'url', nameErrorPath: 'name')] +#[UniqueDirectoryMod(groups: [ModSourceEnum::DIRECTORY])] class ModFormDto extends AbstractFormDto { protected ?UuidInterface $id = null; - /** - * @Assert\NotBlank(groups={ModSourceEnum::DIRECTORY}) - * @Assert\Length(min=1, max=255) - */ + #[Assert\NotBlank(groups: [ModSourceEnum::DIRECTORY])] + #[Assert\Length(min: 1, max: 255)] protected ?string $name = null; - /** - * @Assert\Length(min=1, max=255) - */ + #[Assert\Length(min: 1, max: 255)] protected ?string $description = null; - /** - * @Assert\Expression( - * "!(this.getType() != constant('App\\Entity\\Mod\\Enum\\ModTypeEnum::SERVER_SIDE') && this.getSource() == constant('App\\Entity\\Mod\\Enum\\ModSourceEnum::DIRECTORY'))", - * ) - */ + #[Assert\Expression("!(this.getType() != constant('App\\Entity\\Mod\\Enum\\ModTypeEnum::SERVER_SIDE') && this.getSource() == constant('App\\Entity\\Mod\\Enum\\ModSourceEnum::DIRECTORY'))")] protected ?string $type = null; protected ?string $status = null; - /** - * @Assert\Expression( - * "!(this.getSource() == constant('App\\Entity\\Mod\\Enum\\ModSourceEnum::DIRECTORY') && this.getType() != constant('App\\Entity\\Mod\\Enum\\ModTypeEnum::SERVER_SIDE'))", - * ) - */ + #[Assert\Expression("!(this.getSource() == constant('App\\Entity\\Mod\\Enum\\ModSourceEnum::DIRECTORY') && this.getType() != constant('App\\Entity\\Mod\\Enum\\ModTypeEnum::SERVER_SIDE'))")] protected ?string $source = null; - /** - * @Assert\NotBlank(groups={ModSourceEnum::STEAM_WORKSHOP}) - * @Assert\Length(min=1, max=255, groups={ModSourceEnum::STEAM_WORKSHOP}) - */ + #[Assert\NotBlank(groups: [ModSourceEnum::STEAM_WORKSHOP])] + #[Assert\Length(min: 1, max: 255, groups: [ModSourceEnum::STEAM_WORKSHOP])] protected ?string $url = null; - /** - * @Assert\NotBlank(groups={ModSourceEnum::DIRECTORY}) - * @WindowsDirectoryName(groups={ModSourceEnum::DIRECTORY}) - */ + #[Assert\NotBlank(groups: [ModSourceEnum::DIRECTORY])] + #[WindowsDirectoryName(groups: [ModSourceEnum::DIRECTORY])] protected ?string $directory = null; public function resolveValidationGroups(): array diff --git a/src/Form/ModGroup/Dto/ModGroupFormDto.php b/src/Form/ModGroup/Dto/ModGroupFormDto.php index 0879b6ed..ffe04f1e 100644 --- a/src/Form/ModGroup/Dto/ModGroupFormDto.php +++ b/src/Form/ModGroup/Dto/ModGroupFormDto.php @@ -12,22 +12,16 @@ use Ramsey\Uuid\UuidInterface; use Symfony\Component\Validator\Constraints as Assert; -/** - * @UniqueModGroupName(errorPath="name") - */ +#[UniqueModGroupName(errorPath: 'name')] class ModGroupFormDto extends AbstractFormDto { protected ?UuidInterface $id = null; - /** - * @Assert\NotBlank - * @Assert\Length(max=255) - */ + #[Assert\NotBlank] + #[Assert\Length(max: 255)] protected ?string $name = null; - /** - * @Assert\Length(min=1, max=255) - */ + #[Assert\Length(min: 1, max: 255)] protected ?string $description = null; /** diff --git a/src/Form/ModList/Dto/ModListFormDto.php b/src/Form/ModList/Dto/ModListFormDto.php index 5bc89967..90d37190 100644 --- a/src/Form/ModList/Dto/ModListFormDto.php +++ b/src/Form/ModList/Dto/ModListFormDto.php @@ -22,15 +22,11 @@ class ModListFormDto extends AbstractFormDto { protected ?UuidInterface $id = null; - /** - * @Assert\NotBlank - * @Assert\Length(max=255) - */ + #[Assert\NotBlank] + #[Assert\Length(max: 255)] protected ?string $name = null; - /** - * @Assert\Length(min=1, max=255) - */ + #[Assert\Length(min: 1, max: 255)] protected ?string $description = null; /** diff --git a/src/Form/User/Dto/UserFormDto.php b/src/Form/User/Dto/UserFormDto.php index c1b7a187..97d606b2 100644 --- a/src/Form/User/Dto/UserFormDto.php +++ b/src/Form/User/Dto/UserFormDto.php @@ -17,9 +17,7 @@ class UserFormDto extends AbstractFormDto { protected ?UuidInterface $id = null; - /** - * @SteamProfileId - */ + #[SteamProfileId] protected ?int $steamId = null; protected ?UserPermissions $permissions = null; diff --git a/src/Form/UserGroup/Dto/UserGroupFormDto.php b/src/Form/UserGroup/Dto/UserGroupFormDto.php index ee412c93..7697d921 100644 --- a/src/Form/UserGroup/Dto/UserGroupFormDto.php +++ b/src/Form/UserGroup/Dto/UserGroupFormDto.php @@ -14,22 +14,16 @@ use Ramsey\Uuid\UuidInterface; use Symfony\Component\Validator\Constraints as Assert; -/** - * @UniqueUserGroupName(errorPath="name") - */ +#[UniqueUserGroupName(errorPath: 'name')] class UserGroupFormDto extends AbstractFormDto { protected ?UuidInterface $id = null; - /** - * @Assert\NotBlank - * @Assert\Length(max=255) - */ + #[Assert\NotBlank] + #[Assert\Length(max: 255)] protected ?string $name = null; - /** - * @Assert\Length(min=1, max=255) - */ + #[Assert\Length(min: 1, max: 255)] protected ?string $description = null; protected ?UserGroupPermissions $permissions = null; diff --git a/src/Validator/Attendance/UniqueAttendance.php b/src/Validator/Attendance/UniqueAttendance.php index 77e5a795..1457a959 100644 --- a/src/Validator/Attendance/UniqueAttendance.php +++ b/src/Validator/Attendance/UniqueAttendance.php @@ -6,14 +6,25 @@ use Symfony\Component\Validator\Constraint; -/** - * @Annotation - */ +#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] class UniqueAttendance extends Constraint { public string $message = 'Attendance of player "{{ playerId }}" in mission "{{ missionId }}" already exists'; public ?string $errorPath = null; + public function __construct( + string $message = null, + string $errorPath = null, + $options = null, + array $groups = null, + $payload = null + ) { + parent::__construct($options, $groups, $payload); + + $this->message = $message ?? $this->message; + $this->errorPath = $errorPath ?? $this->errorPath; + } + public function getTargets(): array|string { return parent::CLASS_CONSTRAINT; diff --git a/src/Validator/Dlc/SteamStoreArma3DlcUrl.php b/src/Validator/Dlc/SteamStoreArma3DlcUrl.php index f5072a2d..986a17af 100644 --- a/src/Validator/Dlc/SteamStoreArma3DlcUrl.php +++ b/src/Validator/Dlc/SteamStoreArma3DlcUrl.php @@ -6,9 +6,7 @@ use Symfony\Component\Validator\Constraint; -/** - * @Annotation - */ +#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] class SteamStoreArma3DlcUrl extends Constraint { public string $invalidDlcUrlMessage = 'Invalid Steam Store DLC url'; @@ -16,6 +14,23 @@ class SteamStoreArma3DlcUrl extends Constraint public string $notAnArma3DlcMessage = 'Url is not an Arma 3 DLC'; public ?string $errorPath = null; + public function __construct( + string $invalidDlcUrlMessage = null, + string $dlcNotFoundMessage = null, + string $notAnArma3DlcMessage = null, + string $errorPath = null, + $options = null, + array $groups = null, + $payload = null + ) { + parent::__construct($options, $groups, $payload); + + $this->invalidDlcUrlMessage = $invalidDlcUrlMessage ?? $this->{$invalidDlcUrlMessage}; + $this->dlcNotFoundMessage = $dlcNotFoundMessage ?? $this->dlcNotFoundMessage; + $this->notAnArma3DlcMessage = $notAnArma3DlcMessage ?? $this->notAnArma3DlcMessage; + $this->errorPath = $errorPath ?? $this->errorPath; + } + public function getTargets(): array|string { return parent::CLASS_CONSTRAINT; diff --git a/src/Validator/Dlc/UniqueDirectoryDlc.php b/src/Validator/Dlc/UniqueDirectoryDlc.php index 880cb645..55ab72ef 100644 --- a/src/Validator/Dlc/UniqueDirectoryDlc.php +++ b/src/Validator/Dlc/UniqueDirectoryDlc.php @@ -6,14 +6,25 @@ use Symfony\Component\Validator\Constraint; -/** - * @Annotation - */ +#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] class UniqueDirectoryDlc extends Constraint { public string $message = 'DLC associated with directory "{{ directoryName }}" already exist'; public ?string $errorPath = null; + public function __construct( + string $message = null, + string $errorPath = null, + $options = null, + array $groups = null, + $payload = null + ) { + parent::__construct($options, $groups, $payload); + + $this->message = $message ?? $this->message; + $this->errorPath = $errorPath ?? $this->errorPath; + } + public function getTargets(): array|string { return parent::CLASS_CONSTRAINT; diff --git a/src/Validator/Dlc/UniqueSteamStoreDlc.php b/src/Validator/Dlc/UniqueSteamStoreDlc.php index 4b397c75..8b66688a 100644 --- a/src/Validator/Dlc/UniqueSteamStoreDlc.php +++ b/src/Validator/Dlc/UniqueSteamStoreDlc.php @@ -6,14 +6,25 @@ use Symfony\Component\Validator\Constraint; -/** - * @Annotation - */ +#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] class UniqueSteamStoreDlc extends Constraint { public string $message = 'DLC associated with url "{{ dlcUrl }}" already exist'; public ?string $errorPath = null; + public function __construct( + string $message = null, + string $errorPath = null, + $options = null, + array $groups = null, + $payload = null + ) { + parent::__construct($options, $groups, $payload); + + $this->message = $message ?? $this->message; + $this->errorPath = $errorPath ?? $this->errorPath; + } + public function getTargets(): array|string { return parent::CLASS_CONSTRAINT; diff --git a/src/Validator/Mod/SteamWorkshopArma3ModUrl.php b/src/Validator/Mod/SteamWorkshopArma3ModUrl.php index 0e13ef8a..4baef8d2 100644 --- a/src/Validator/Mod/SteamWorkshopArma3ModUrl.php +++ b/src/Validator/Mod/SteamWorkshopArma3ModUrl.php @@ -6,9 +6,7 @@ use Symfony\Component\Validator\Constraint; -/** - * @Annotation - */ +#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] class SteamWorkshopArma3ModUrl extends Constraint { public string $invalidModUrlMessage = 'Invalid Steam Workshop mod url'; @@ -18,6 +16,27 @@ class SteamWorkshopArma3ModUrl extends Constraint public ?string $errorPath = null; public ?string $nameErrorPath = null; + public function __construct( + string $invalidModUrlMessage = null, + string $modNotFoundMessage = null, + string $notAnArma3ModMessage = null, + string $modIsPrivateOrMissingDetails = null, + string $errorPath = null, + string $nameErrorPath = null, + $options = null, + array $groups = null, + $payload = null + ) { + parent::__construct($options, $groups, $payload); + + $this->invalidModUrlMessage = $invalidModUrlMessage ?? $this->invalidModUrlMessage; + $this->modNotFoundMessage = $modNotFoundMessage ?? $this->modNotFoundMessage; + $this->notAnArma3ModMessage = $notAnArma3ModMessage ?? $this->notAnArma3ModMessage; + $this->modIsPrivateOrMissingDetails = $modIsPrivateOrMissingDetails ?? $this->modIsPrivateOrMissingDetails; + $this->errorPath = $errorPath ?? $this->errorPath; + $this->nameErrorPath = $nameErrorPath ?? $this->nameErrorPath; + } + public function getTargets(): array|string { return parent::CLASS_CONSTRAINT; diff --git a/src/Validator/Mod/UniqueDirectoryMod.php b/src/Validator/Mod/UniqueDirectoryMod.php index 2bc9fed6..a8e336b7 100644 --- a/src/Validator/Mod/UniqueDirectoryMod.php +++ b/src/Validator/Mod/UniqueDirectoryMod.php @@ -6,14 +6,25 @@ use Symfony\Component\Validator\Constraint; -/** - * @Annotation - */ +#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] class UniqueDirectoryMod extends Constraint { public string $message = 'Mod associated with directory "{{ directoryName }}" already exist'; public ?string $errorPath = null; + public function __construct( + string $message = null, + string $errorPath = null, + $options = null, + array $groups = null, + $payload = null + ) { + parent::__construct($options, $groups, $payload); + + $this->message = $message ?? $this->message; + $this->errorPath = $errorPath ?? $this->errorPath; + } + public function getTargets(): array|string { return parent::CLASS_CONSTRAINT; diff --git a/src/Validator/Mod/UniqueSteamWorkshopMod.php b/src/Validator/Mod/UniqueSteamWorkshopMod.php index b2c6e7fd..f84fb807 100644 --- a/src/Validator/Mod/UniqueSteamWorkshopMod.php +++ b/src/Validator/Mod/UniqueSteamWorkshopMod.php @@ -6,14 +6,25 @@ use Symfony\Component\Validator\Constraint; -/** - * @Annotation - */ +#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] class UniqueSteamWorkshopMod extends Constraint { public string $message = 'Mod associated with url "{{ modUrl }}" already exist'; public ?string $errorPath = null; + public function __construct( + string $message = null, + string $errorPath = null, + $options = null, + array $groups = null, + $payload = null + ) { + parent::__construct($options, $groups, $payload); + + $this->message = $message ?? $this->message; + $this->errorPath = $errorPath ?? $this->errorPath; + } + public function getTargets(): array|string { return parent::CLASS_CONSTRAINT; diff --git a/src/Validator/ModGroup/UniqueModGroupName.php b/src/Validator/ModGroup/UniqueModGroupName.php index 4d68d788..e11e2592 100644 --- a/src/Validator/ModGroup/UniqueModGroupName.php +++ b/src/Validator/ModGroup/UniqueModGroupName.php @@ -6,14 +6,25 @@ use Symfony\Component\Validator\Constraint; -/** - * @Annotation - */ +#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] class UniqueModGroupName extends Constraint { public string $message = 'Mod group with the same name "{{ modGroupName }}" already exist'; public ?string $errorPath = null; + public function __construct( + string $message = null, + string $errorPath = null, + $options = null, + array $groups = null, + $payload = null + ) { + parent::__construct($options, $groups, $payload); + + $this->message = $message ?? $this->message; + $this->errorPath = $errorPath ?? $this->errorPath; + } + public function getTargets(): array|string { return parent::CLASS_CONSTRAINT; diff --git a/src/Validator/ModList/UniqueModListName.php b/src/Validator/ModList/UniqueModListName.php index f4c6a1b3..06d1c762 100644 --- a/src/Validator/ModList/UniqueModListName.php +++ b/src/Validator/ModList/UniqueModListName.php @@ -6,14 +6,25 @@ use Symfony\Component\Validator\Constraint; -/** - * @Annotation - */ +#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] class UniqueModListName extends Constraint { public string $message = 'Mod list with the same name "{{ modListName }}" already exist'; public ?string $errorPath = null; + public function __construct( + string $message = null, + string $errorPath = null, + $options = null, + array $groups = null, + $payload = null + ) { + parent::__construct($options, $groups, $payload); + + $this->message = $message ?? $this->message; + $this->errorPath = $errorPath ?? $this->errorPath; + } + public function getTargets(): array|string { return parent::CLASS_CONSTRAINT; diff --git a/src/Validator/SteamProfileId.php b/src/Validator/SteamProfileId.php index dce0c816..d6678fab 100644 --- a/src/Validator/SteamProfileId.php +++ b/src/Validator/SteamProfileId.php @@ -6,9 +6,7 @@ use Symfony\Component\Validator\Constraints\Regex; -/** - * @Annotation - */ +#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)] class SteamProfileId extends Regex { /** @var string */ @@ -17,6 +15,28 @@ class SteamProfileId extends Regex /** @var string */ public $pattern = '~^\d{17}$~'; + public function __construct( + string $pattern = null, + string $message = null, + string $htmlPattern = null, + bool $match = null, + callable $normalizer = null, + array $groups = null, + $payload = null, + array $options = [] + ) { + parent::__construct( + $pattern ?? $this->pattern, + $message, + $htmlPattern, + $match, + $normalizer, + $groups, + $payload, + $options + ); + } + /** * @return string[] */ diff --git a/src/Validator/User/UniqueUserSteamId.php b/src/Validator/User/UniqueUserSteamId.php index 4e63d286..475bd726 100644 --- a/src/Validator/User/UniqueUserSteamId.php +++ b/src/Validator/User/UniqueUserSteamId.php @@ -6,14 +6,25 @@ use Symfony\Component\Validator\Constraint; -/** - * @Annotation - */ +#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] class UniqueUserSteamId extends Constraint { public string $message = 'User with the same Steam ID "{{ userSteamId }}" already exist'; public ?string $errorPath = null; + public function __construct( + string $message = null, + string $errorPath = null, + $options = null, + array $groups = null, + $payload = null + ) { + parent::__construct($options, $groups, $payload); + + $this->message = $message ?? $this->message; + $this->errorPath = $errorPath ?? $this->errorPath; + } + public function getTargets(): array|string { return parent::CLASS_CONSTRAINT; diff --git a/src/Validator/UserGroup/UniqueUserGroupName.php b/src/Validator/UserGroup/UniqueUserGroupName.php index 8b13df7f..1c63cbcd 100644 --- a/src/Validator/UserGroup/UniqueUserGroupName.php +++ b/src/Validator/UserGroup/UniqueUserGroupName.php @@ -6,14 +6,25 @@ use Symfony\Component\Validator\Constraint; -/** - * @Annotation - */ +#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] class UniqueUserGroupName extends Constraint { public string $message = 'User group with the same name "{{ userGroupName }}" already exist'; public ?string $errorPath = null; + public function __construct( + string $message = null, + string $errorPath = null, + $options = null, + array $groups = null, + $payload = null + ) { + parent::__construct($options, $groups, $payload); + + $this->message = $message ?? $this->message; + $this->errorPath = $errorPath ?? $this->errorPath; + } + public function getTargets(): array|string { return parent::CLASS_CONSTRAINT; diff --git a/src/Validator/WindowsDirectoryName.php b/src/Validator/WindowsDirectoryName.php index 53d1f12f..bb1b666f 100644 --- a/src/Validator/WindowsDirectoryName.php +++ b/src/Validator/WindowsDirectoryName.php @@ -6,9 +6,7 @@ use Symfony\Component\Validator\Constraints\Regex; -/** - * @Annotation - */ +#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)] class WindowsDirectoryName extends Regex { /** @var string */ @@ -17,6 +15,28 @@ class WindowsDirectoryName extends Regex /** @var string */ public $pattern = '/^.{1,248}[^<>:"\/\|?*]$/ui'; + public function __construct( + string $pattern = null, + string $message = null, + string $htmlPattern = null, + bool $match = null, + callable $normalizer = null, + array $groups = null, + $payload = null, + array $options = [] + ) { + parent::__construct( + $pattern ?? $this->pattern, + $message, + $htmlPattern, + $match, + $normalizer, + $groups, + $payload, + $options + ); + } + /** * @return string[] */