Метод transform класса CallbackTransformer
Метод transform класса CallbackTransformer позволяет изменить значение проверяемого свойства перед тем, как к нему будут применены ограничения валидации. Он принимает исходное значение в качестве первого параметра и возвращает преобразованное значение. Этот метод особенно полезен, когда необходимо нормализовать данные или извлечь часть значения для последующей проверки.
Синтаксис
public function transform(mixed $value): mixed
Пример
Давайте создадим класс-трансформер, который будет преобразовывать строку в верхний регистр перед валидацией:
<?php
namespace App\Validator;
use Symfony\Component\Validator\Constraints\Callback;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
class UpperCaseTransformer extends CallbackTransformer
{
public function transform(mixed $value): mixed
{
return strtoupper($value);
}
public function reverseTransform(mixed $value): mixed
{
return strtolower($value);
}
}
?>
Пример
Давайте применим трансформер к свойству сущности через ограничение Callback:
<?php
namespace App\Entity;
use App\Validator\UpperCaseTransformer;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
class Article
{
#[Assert\Callback([UpperCaseTransformer::class, 'transform'])]
private string $title = '';
public function getTitle(): string
{
return $this->title;
}
public function setTitle(string $title): void
{
$this->title = $title;
}
}
?>
Пример
Давайте проверим работу трансформера с помощью валидатора:
<?php
namespace App\Controller;
use App\Entity\Article;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Validator\Validation;
class ArticleController extends AbstractController
{
#[Route('/validate', name: 'article_validate')]
public function validate(): Response
{
$article = new Article();
$article->setTitle('abcde');
$validator = Validation::createValidator();
$violations = $validator->validate($article);
return new Response((string) $violations);
}
}
?>
Результат выполнения кода:
""
Смотрите также
-
класс
CallbackTransformer,
который преобразует значения при валидации -
метод
reverseTransform,
который выполняет обратное преобразование -
класс
Validator,
который выполняет валидацию объектов -
метод
validate,
который запускает процесс валидации