Метод reverseTransform класса CallbackTransformer
Метод reverseTransform класса CallbackTransformer
выполняет обратное преобразование значения после
валидации. Если метод transform готовит данные
для проверки, то reverseTransform возвращает
данные в исходный вид. Метод принимает один параметр -
значение, полученное после валидации, и возвращает
преобразованное значение.
Синтаксис
public function reverseTransform(mixed $value): mixed
Пример
Давайте создадим трансформер, который при прямом преобразовании превращает строку в массив, а при обратном - собирает массив обратно в строку:
<?php
namespace AppValidator;
use SymfonyComponentValidatorCallbackTransformer;
class CallbackTransformer
{
public function transform(mixed $value): mixed
{
return explode(',', $value);
}
public function reverseTransform(mixed $value): mixed
{
return implode(',', $value);
}
}
?>
Результат выполнения метода reverseTransform
для массива ['a', 'b', 'c']:
"a,b,c"
Пример
Давайте применим трансформер к полю сущности через
ограничение Callback:
<?php
namespace AppEntity;
use AppValidatorCallbackTransformer;
use SymfonyComponentValidatorConstraints as Assert;
class Article
{
#[AssertCallback(
callback: [CallbackTransformer::class, 'transform']
)]
public string $title = '';
public function reverseTitle(mixed $value): mixed
{
return (new CallbackTransformer())->reverseTransform($value);
}
}
?>
Результат выполнения метода reverseTransform
для массива ['article', 'user', 'hello']:
"article,user,hello"
Пример
Давайте проверим работу трансформера в контроллере
с помощью сервиса ValidatorInterface:
<?php
namespace AppController;
use AppValidatorCallbackTransformer;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyComponentValidatorValidatorValidatorInterface;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(ValidatorInterface $validator): Response
{
$transformer = new CallbackTransformer();
$value = $transformer->reverseTransform(['abcde']);
return new Response($value);
}
}
?>
Результат выполнения кода:
abcde
Смотрите также
-
класс
CallbackTransformer,
который выполняет преобразование значений при валидации -
метод
transform,
который выполняет прямое преобразование значения -
класс
Validator,
который выполняет валидацию объектов -
метод
validate,
который запускает проверку объекта