‪TYPO3CMS  ‪main
AbstractCompositeValidator.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 
22 
26 abstract class ‪AbstractCompositeValidator implements ‪ObjectValidatorInterface, \Countable
27 {
33  protected ‪$supportedOptions = [];
34 
35  protected array ‪$options = [];
36  protected \SplObjectStorage ‪$validators;
37 
45  protected \SplObjectStorage ‪$validatedInstancesContainer;
46 
47  public function ‪setOptions(array ‪$options): void
48  {
49  $this->‪initializeDefaultOptions($options);
50  }
51 
56  {
57  $this->validators->attach(‪$validator);
58  }
59 
66  {
67  if (!$this->validators->contains(‪$validator)) {
68  throw new ‪NoSuchValidatorException('Cannot remove validator because its not in the conjunction.', 1207020177);
69  }
70  $this->validators->detach(‪$validator);
71  }
72 
76  public function ‪count(): int
77  {
78  return ‪count($this->validators);
79  }
80 
84  public function ‪getValidators(): \SplObjectStorage
85  {
86  return ‪$this->validators;
87  }
88 
92  public function ‪getOptions(): array
93  {
94  return ‪$this->options;
95  }
96 
100  public function ‪setValidatedInstancesContainer(\SplObjectStorage ‪$validatedInstancesContainer): void
101  {
102  $this->validatedInstancesContainer = ‪$validatedInstancesContainer;
103  }
104 
109  protected function ‪initializeDefaultOptions(array ‪$options): void
110  {
111  // check for options given but not supported
112  if (($unsupportedOptions = array_diff_key(‪$options, $this->supportedOptions)) !== []) {
113  throw new InvalidValidationOptionsException('Unsupported validation option(s) found: ' . implode(', ', array_keys($unsupportedOptions)), 1339079804);
114  }
115  // check for required options being set
116  array_walk(
117  $this->supportedOptions,
118  static function (array $supportedOptionData, string $supportedOptionName, array ‪$options): void {
119  if (isset($supportedOptionData[3]) && !array_key_exists($supportedOptionName, ‪$options)) {
120  throw new InvalidValidationOptionsException('Required validation option not set: ' . $supportedOptionName, 1339163922);
121  }
122  },
124  );
125  // merge with default values
126  $this->options = array_merge(
127  array_map(
128  static fn(array $value): mixed => $value[0],
129  $this->supportedOptions
130  ),
132  );
133  $this->validators = new \SplObjectStorage();
134  }
135 }
‪TYPO3\CMS\Extbase\Validation\Validator\ObjectValidatorInterface
Definition: ObjectValidatorInterface.php:24
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractCompositeValidator\getValidators
‪getValidators()
Definition: AbstractCompositeValidator.php:83
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractCompositeValidator\$validators
‪SplObjectStorage $validators
Definition: AbstractCompositeValidator.php:35
‪TYPO3\CMS\Extbase\Validation\Exception\NoSuchValidatorException
Definition: NoSuchValidatorException.php:25
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractCompositeValidator\$supportedOptions
‪array $supportedOptions
Definition: AbstractCompositeValidator.php:32
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractCompositeValidator\setValidatedInstancesContainer
‪setValidatedInstancesContainer(\SplObjectStorage $validatedInstancesContainer)
Definition: AbstractCompositeValidator.php:99
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractCompositeValidator\$options
‪array $options
Definition: AbstractCompositeValidator.php:34
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractCompositeValidator\getOptions
‪getOptions()
Definition: AbstractCompositeValidator.php:91
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractCompositeValidator\setOptions
‪setOptions(array $options)
Definition: AbstractCompositeValidator.php:46
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractCompositeValidator\count
‪count()
Definition: AbstractCompositeValidator.php:75
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractCompositeValidator\$validatedInstancesContainer
‪SplObjectStorage $validatedInstancesContainer
Definition: AbstractCompositeValidator.php:44
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractCompositeValidator\addValidator
‪addValidator(ValidatorInterface $validator)
Definition: AbstractCompositeValidator.php:54
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractCompositeValidator\initializeDefaultOptions
‪initializeDefaultOptions(array $options)
Definition: AbstractCompositeValidator.php:108
‪$validator
‪if(isset($args['d'])) $validator
Definition: validateRstFiles.php:262
‪TYPO3\CMS\Extbase\Validation\Validator
Definition: AbstractCompositeValidator.php:18
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractCompositeValidator\removeValidator
‪removeValidator(ValidatorInterface $validator)
Definition: AbstractCompositeValidator.php:64
‪TYPO3\CMS\Extbase\Validation\Validator\ValidatorInterface
Definition: ValidatorInterface.php:26
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractCompositeValidator
Definition: AbstractCompositeValidator.php:27
‪TYPO3\CMS\Extbase\Validation\Exception\InvalidValidationOptionsException
Definition: InvalidValidationOptionsException.php:25