Skip to content

Commit f6f7d56

Browse files
martenbf3l1x
authored andcommitted
feat: add Translator to SymfonyValidator
1 parent 1759ce0 commit f6f7d56

File tree

4 files changed

+28
-1
lines changed

4 files changed

+28
-1
lines changed

.docs/mapping.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,14 +236,18 @@ final class UserFilter extends BasicEntity
236236
```
237237

238238
You can override `ConstraintValidatorFactory` on `SymfonyValidator`. If you want to use [custom validation contstraints](https://symfony.com/doc/current/validation/custom_constraint.html) with support of Nette DI,
239-
you should also install [contributte/validator](https://github.com/contributte/validator). Take a look at example.
239+
you should also install [contributte/validator](https://github.com/contributte/validator).
240+
If you want to use translated constraint messages, you can use [contributte/translation](https://github.com/contributte/translation).
241+
Take a look at example.
240242

241243
```yaml
242244
services:
243245
symfonyValidator:
244246
factory: Apitte\Core\Mapping\Validator\SymfonyValidator
245247
setup:
246248
- setConstraintValidatorFactory(Contributte\Validator\ContainerConstraintValidatorFactory())
249+
- setTranslator(@Contributte\Translation\Translator)
250+
- setTranslationDomain('validators')
247251
api:
248252
plugins:
249253
Apitte\Core\DI\Plugin\CoreMappingPlugin:

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
"nette/http": "^3.2.3",
4141
"psr/log": "^2.0.0 || ^3.0.0",
4242
"symfony/console": "^6.4.0 || ^7.0.0",
43+
"symfony/translation": "^6.4.0 | ^7.0.0",
4344
"symfony/validator": "^6.4.0 || ^7.0.0",
4445
"symfony/yaml": "^6.4.0 || ^7.0.0",
4546
"tracy/tracy": "^2.10.5"

src/Core/Mapping/Validator/SymfonyValidator.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Symfony\Component\Validator\ConstraintValidatorFactoryInterface;
99
use Symfony\Component\Validator\ConstraintViolationListInterface;
1010
use Symfony\Component\Validator\Validation;
11+
use Symfony\Contracts\Translation\TranslatorInterface;
1112

1213
class SymfonyValidator implements IEntityValidator
1314
{
@@ -16,6 +17,10 @@ class SymfonyValidator implements IEntityValidator
1617

1718
private ?ConstraintValidatorFactoryInterface $constraintValidatorFactory = null;
1819

20+
private ?TranslatorInterface $translator = null;
21+
22+
private ?string $translationDomain = null;
23+
1924
public function __construct(?Reader $reader = null)
2025
{
2126
$this->reader = $reader;
@@ -27,6 +32,16 @@ public function setConstraintValidatorFactory(ConstraintValidatorFactoryInterfac
2732
$this->constraintValidatorFactory = $constraintValidatorFactory;
2833
}
2934

35+
public function setTranslator(TranslatorInterface $translator): void
36+
{
37+
$this->translator = $translator;
38+
}
39+
40+
public function setTranslationDomain(string $translationDomain): void
41+
{
42+
$this->translationDomain = $translationDomain;
43+
}
44+
3045
/**
3146
* @throws ValidationException
3247
* @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingParameterTypeHint
@@ -44,6 +59,11 @@ public function validate(object $entity): void
4459
$validatorBuilder->setConstraintValidatorFactory($this->constraintValidatorFactory);
4560
}
4661

62+
if ($this->translator !== null) {
63+
$validatorBuilder->setTranslator($this->translator);
64+
$validatorBuilder->setTranslationDomain($this->translationDomain);
65+
}
66+
4767
$validator = $validatorBuilder->getValidator();
4868

4969
/** @var ConstraintViolationListInterface $violations */

tests/Cases/Core/DI/ApiExtension.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ Toolkit::test(function (): void {
107107
)
108108
setup:
109109
- setConstraintValidatorFactory(Symfony\Component\Validator\ConstraintValidatorFactory())
110+
- setTranslator(Symfony\Component\Translation\Translator(en))
111+
- setTranslationDomain(validators)
110112
api:
111113
plugins:
112114
Apitte\Core\DI\Plugin\CoreMappingPlugin:

0 commit comments

Comments
 (0)