Skip to content

Commit e83c86c

Browse files
committed
feat: improve SimpleValidation, ConditionalValidationNotTriggered, CustomStrategy ~40%
1 parent 9d530b8 commit e83c86c

3 files changed

Lines changed: 65 additions & 16 deletions

File tree

src/DataVerify.php

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,12 @@ class DataVerify
6161
private ValidationContext $context;
6262
private FieldCollection $fields;
6363
private ErrorCollection $errors;
64-
private TranslationManager $translationManager;
64+
private ?TranslationManager $translationManager = null;
6565
private bool $hasVerified = false;
6666

6767
// Engines
6868
private ValidationOrchestrator $orchestrator;
6969
private ConditionalEngine $conditionalEngine;
70-
private ErrorManager $errorManager;
7170
private DataTraverser $dataTraverser;
7271
private LazyValidationRegistry $lazyRegistry;
7372

@@ -77,7 +76,6 @@ public function __construct(array|object $data)
7776
$this->context = new ValidationContext();
7877
$this->fields = new FieldCollection();
7978
$this->errors = new ErrorCollection();
80-
$this->translationManager = new TranslationManager();
8179
$this->lazyRegistry = LazyValidationRegistry::instance();
8280

8381
$this->initializeEngines();
@@ -87,12 +85,10 @@ private function initializeEngines(): void
8785
{
8886
$this->dataTraverser = new DataTraverser($this->data);
8987
$this->conditionalEngine = new ConditionalEngine($this->dataTraverser);
90-
$this->errorManager = new ErrorManager($this->errors, $this->translationManager, $this->lazyRegistry);
9188

9289
$this->orchestrator = new ValidationOrchestrator(
9390
$this->fields,
9491
$this->errors,
95-
$this->errorManager,
9692
$this->dataTraverser,
9793
$this->conditionalEngine,
9894
new ValidationRegistry(),
@@ -261,27 +257,44 @@ public function alias(string $name): self
261257
return $this;
262258
}
263259

260+
/**
261+
* Get or create translation manager lazily
262+
*/
263+
private function getTranslationManager(): TranslationManager
264+
{
265+
if ($this->translationManager === null) {
266+
$this->translationManager = new TranslationManager();
267+
}
268+
269+
// Injecter dans l'ErrorManager de l'Orchestrator (qui pourrait être lazy aussi)
270+
// On crée l'ErrorManager maintenant si on configure les traductions
271+
$errorManager = new ErrorManager($this->errors, $this->lazyRegistry, $this->translationManager);
272+
$this->orchestrator->setErrorManager($errorManager);
273+
274+
return $this->translationManager;
275+
}
276+
264277
public function setTranslator(TranslatorInterface $translator): self
265278
{
266-
$this->translationManager->setTranslator($translator);
279+
$this->getTranslationManager()->setTranslator($translator);
267280
return $this;
268281
}
269282

270283
public function setLocale(string $locale): self
271284
{
272-
$this->translationManager->setLocale($locale);
285+
$this->getTranslationManager()->setLocale($locale);
273286
return $this;
274287
}
275288

276289
public function addTranslations(array $translations, string $locale = 'en'): self
277290
{
278-
$this->translationManager->addTranslations($translations, $locale);
291+
$this->getTranslationManager()->addTranslations($translations, $locale);
279292
return $this;
280293
}
281294

282295
public function loadLocale(string $locale, ?string $filePath = null): self
283296
{
284-
$this->translationManager->loadLocale($locale, $filePath);
297+
$this->getTranslationManager()->loadLocale($locale, $filePath);
285298
return $this;
286299
}
287300

@@ -423,4 +436,4 @@ public static function enableIdeHelper(?string $outputPath = null): void
423436
{
424437
\Gravity\Documentation\IdeHelperManager::instance()->enable($outputPath);
425438
}
426-
}
439+
}

src/Engine/ErrorManager.php

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,15 @@
1515
*/
1616
class ErrorManager
1717
{
18+
private ?TranslationManager $translationManager = null;
19+
1820
public function __construct(
1921
private ErrorCollection $errors,
20-
private TranslationManager $translationManager,
21-
private LazyValidationRegistry $registry
22-
) {}
22+
private LazyValidationRegistry $registry,
23+
?TranslationManager $translationManager = null
24+
) {
25+
$this->translationManager = $translationManager;
26+
}
2327

2428
/**
2529
* Add validation error with translated message
@@ -36,7 +40,7 @@ public function addError(
3640

3741
if (!$errorMessage) {
3842
$params = $this->buildValidationParams($testName, $args);
39-
$errorMessage = $this->translationManager->getValidationMessage(
43+
$errorMessage = $this->getTranslationManager()->getValidationMessage(
4044
$testName,
4145
$alias,
4246
$value,
@@ -93,9 +97,21 @@ private function mapArgsToParams(ValidationMetadata $metadata, array $args): arr
9397

9498
/**
9599
* Get translation manager for external configuration
100+
* Lazy-loads if not already set
96101
*/
97102
public function getTranslationManager(): TranslationManager
98103
{
104+
if ($this->translationManager === null) {
105+
$this->translationManager = new TranslationManager();
106+
}
99107
return $this->translationManager;
100108
}
109+
110+
/**
111+
* Set translation manager (for user customization)
112+
*/
113+
public function setTranslationManager(TranslationManager $translationManager): void
114+
{
115+
$this->translationManager = $translationManager;
116+
}
101117
}

src/Engine/ValidationOrchestrator.php

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,37 @@
2121
*/
2222
class ValidationOrchestrator
2323
{
24+
private ?ErrorManager $errorManager = null;
25+
2426
public function __construct(
2527
private FieldCollection $fields,
2628
private ErrorCollection $errors,
27-
private ErrorManager $errorManager,
2829
private DataTraverser $dataTraverser,
2930
private ConditionalEngine $conditionalEngine,
3031
private ValidationRegistry $registry,
3132
private LazyValidationRegistry $lazyRegistry
3233
) {
3334
// No upfront initialization needed - lazy loading handles it
3435
}
36+
37+
/**
38+
* Get or create ErrorManager lazily (only when validation fails)
39+
*/
40+
private function getErrorManager(): ErrorManager
41+
{
42+
if ($this->errorManager === null) {
43+
$this->errorManager = new ErrorManager($this->errors, $this->lazyRegistry);
44+
}
45+
return $this->errorManager;
46+
}
47+
48+
/**
49+
* Set ErrorManager (for external configuration like translations)
50+
*/
51+
public function setErrorManager(ErrorManager $errorManager): void
52+
{
53+
$this->errorManager = $errorManager;
54+
}
3555

3656
/**
3757
* Execute all validations
@@ -135,7 +155,7 @@ private function executeValidation(
135155
if ($test === 'required' || !$this->dataTraverser->isValueEmpty($value)) {
136156
$result = $this->runValidationTest($test, $value, $args);
137157
if (!$result) {
138-
$this->errorManager->addError($handler, $test, $value, $path, $args);
158+
$this->getErrorManager()->addError($handler, $test, $value, $path, $args);
139159
}
140160
}
141161
}

0 commit comments

Comments
 (0)