‪TYPO3CMS  ‪main
AbstractValidator.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
24 
29 {
39  protected ‪$acceptsEmptyValues = true;
40 
46  protected ‪$supportedOptions = [];
47 
48  protected array ‪$options = [];
49  protected ‪Result ‪$result;
50 
51  public function ‪setOptions(array ‪$options): void
52  {
53  $this->‪initializeDefaultOptions($options);
54  }
55 
62  public function ‪validate(mixed $value): ‪Result
63  {
64  $this->result = new ‪Result();
65  if ($this->acceptsEmptyValues === false || $this->‪isEmpty($value) === false) {
66  $this->‪isValid($value);
67  }
68  return ‪$this->result;
69  }
70 
74  abstract protected function ‪isValid(mixed $value): void;
75 
84  protected function ‪addError(string $message, int $code, array $arguments = [], string $title = ''): void
85  {
86  $this->result->addError(new Error($message, $code, $arguments, $title));
87  }
88 
98  protected function ‪addErrorForProperty(string|array $propertyPath, string $message, int $code, array $arguments = [], string $title = ''): void
99  {
100  $propertyPath = is_array($propertyPath) ? implode('.', $propertyPath) : $propertyPath;
101  $error = new Error($message, $code, $arguments, $title);
102  $this->result->forProperty($propertyPath)->addError($error);
103  }
104 
108  public function ‪getOptions(): array
109  {
110  return ‪$this->options;
111  }
112 
116  final protected function ‪isEmpty(mixed $value): bool
117  {
118  return $value === null || $value === '';
119  }
120 
124  protected function ‪translateErrorMessage(string $translateKey, string $extensionName, array $arguments = []): string
125  {
127  $translateKey,
128  $extensionName,
129  $arguments
130  ) ?? '';
131  }
132 
137  protected function ‪initializeDefaultOptions(array ‪$options): void
138  {
139  // check for options given but not supported
140  if (($unsupportedOptions = array_diff_key(‪$options, $this->supportedOptions)) !== []) {
141  throw new InvalidValidationOptionsException('Unsupported validation option(s) found: ' . implode(', ', array_keys($unsupportedOptions)), 1379981890);
142  }
143  // check for required options being set
144  array_walk(
145  $this->supportedOptions,
146  static function (array $supportedOptionData, string $supportedOptionName, array ‪$options): void {
147  if (isset($supportedOptionData[3]) && $supportedOptionData[3] === true && !array_key_exists($supportedOptionName, ‪$options)) {
148  throw new InvalidValidationOptionsException('Required validation option not set: ' . $supportedOptionName, 1379981891);
149  }
150  },
152  );
153  // merge with default values
154  $this->options = array_merge(
155  array_map(
156  static fn(array $value): mixed => $value[0],
157  $this->supportedOptions
158  ),
160  );
161  }
162 }
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator
Definition: AbstractValidator.php:29
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator\validate
‪validate(mixed $value)
Definition: AbstractValidator.php:60
‪TYPO3\CMS\Extbase\Utility\LocalizationUtility
Definition: LocalizationUtility.php:35
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator\initializeDefaultOptions
‪initializeDefaultOptions(array $options)
Definition: AbstractValidator.php:135
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator\addErrorForProperty
‪addErrorForProperty(string|array $propertyPath, string $message, int $code, array $arguments=[], string $title='')
Definition: AbstractValidator.php:96
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator\addError
‪addError(string $message, int $code, array $arguments=[], string $title='')
Definition: AbstractValidator.php:82
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator\$acceptsEmptyValues
‪bool $acceptsEmptyValues
Definition: AbstractValidator.php:38
‪TYPO3\CMS\Extbase\Error\Result
Definition: Result.php:24
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator\$options
‪array $options
Definition: AbstractValidator.php:46
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator\isValid
‪isValid(mixed $value)
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator\$supportedOptions
‪array $supportedOptions
Definition: AbstractValidator.php:44
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator\translateErrorMessage
‪translateErrorMessage(string $translateKey, string $extensionName, array $arguments=[])
Definition: AbstractValidator.php:122
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator\setOptions
‪setOptions(array $options)
Definition: AbstractValidator.php:49
‪TYPO3\CMS\Extbase\Validation\Error
Definition: Error.php:22
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator\$result
‪Result $result
Definition: AbstractValidator.php:47
‪TYPO3\CMS\Extbase\Utility\LocalizationUtility\translate
‪static string null translate(string $key, ?string $extensionName=null, array $arguments=null, Locale|string $languageKey=null)
Definition: LocalizationUtility.php:47
‪TYPO3\CMS\Extbase\Validation\Validator
Definition: AbstractCompositeValidator.php:18
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator\getOptions
‪getOptions()
Definition: AbstractValidator.php:106
‪TYPO3\CMS\Extbase\Validation\Validator\ValidatorInterface
Definition: ValidatorInterface.php:26
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator\isEmpty
‪isEmpty(mixed $value)
Definition: AbstractValidator.php:114
‪TYPO3\CMS\Extbase\Validation\Exception\InvalidValidationOptionsException
Definition: InvalidValidationOptionsException.php:25