Skip to content

Commit f818a97

Browse files
committed
Replace multiple validators by the composite validator
1 parent 25aaf7f commit f818a97

File tree

2 files changed

+35
-14
lines changed

2 files changed

+35
-14
lines changed

src/Command/AddArticle.php

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use thofman\KnowledgeBase\Domain\Question\Sanitization\StringSanitizer;
1717
use thofman\KnowledgeBase\Domain\Question\Tag;
1818
use thofman\KnowledgeBase\Domain\Question\Validation\AlwaysValidValidator;
19+
use thofman\KnowledgeBase\Domain\Question\Validation\CompositeValidator;
1920
use thofman\KnowledgeBase\Domain\Question\Validation\NonEmptyStringValidator;
2021
use thofman\KnowledgeBase\Domain\Question\Validation\UrlSchemeHttpsValidator;
2122
use thofman\KnowledgeBase\Domain\Question\Validation\UrlValidator;
@@ -44,20 +45,13 @@ public function execute(InputInterface $input, OutputInterface $output): int
4445
$urlQuestion = new Question('Please enter the URL of the article: ', '');
4546
$urlQuestion->setValidator(
4647
static function (string $value): string {
47-
$nonEmptyStringValidator = new NonEmptyStringValidator('URL');
48-
$validationResult = $nonEmptyStringValidator->validate($value);
49-
if (!$validationResult->isValid) {
50-
throw new RuntimeException($validationResult->validationErrorMessage);
51-
}
52-
53-
$urlValidator = new UrlValidator();
54-
$validationResult = $urlValidator->validate($value);
55-
if (!$validationResult->isValid) {
56-
throw new RuntimeException($validationResult->validationErrorMessage);
57-
}
58-
59-
$urlSchemeHttpsValidator = new UrlSchemeHttpsValidator($urlValidator);
60-
$validationResult = $urlSchemeHttpsValidator->validate($value);
48+
$compositeValidator = new CompositeValidator(
49+
[
50+
new NonEmptyStringValidator('URL'),
51+
new UrlSchemeHttpsValidator(new UrlValidator()),
52+
]
53+
);
54+
$validationResult = $compositeValidator->validate($value);
6155
if (!$validationResult->isValid) {
6256
throw new RuntimeException($validationResult->validationErrorMessage);
6357
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace thofman\KnowledgeBase\Domain\Question\Validation;
5+
6+
final readonly class CompositeValidator implements Validator
7+
{
8+
/**
9+
* @param list<Validator> $validators
10+
*/
11+
public function __construct(
12+
private array $validators,
13+
) {
14+
}
15+
16+
public function validate(string $value): ValidationResult
17+
{
18+
$validationResult = ValidationResult::valid($value);
19+
foreach ($this->validators as $validator) {
20+
$validationResult = $validator->validate($validationResult->value);
21+
if (!$validationResult->isValid) {
22+
return $validationResult;
23+
}
24+
}
25+
return $validationResult;
26+
}
27+
}

0 commit comments

Comments
 (0)