dmitrydeco
@dmitrydeco

В чем разница между ModelTransformer и ViewTransformer?

Привет. Собственно, в чем разница между этими двумя трансформерами?

Пример: добавляем в форму поле test:
$builder->add('test', TextType::class, [
    'mapped' => false,
])


Код трансформера:
spoiler

public function transform($value)
{
    return $value;
}

public function reverseTransform($value)
{
    if (!$value) {
        return null;
    }

    return $this->entityManager
        ->getRepository(Test::class)
        ->find($value);
}



Я могу добавить к полю test что ModelTransformer, что ViewTransformer, и на выходе в $form->get('test')->getData() будет объект, (в инпуте пишем id сущности Test) который найдётся по значению в этом поле (сущность Test), то есть оба метода делают то же самое. В чем же отличие между этими методами?
  • Вопрос задан
  • 95 просмотров
Решения вопроса 2
@Flying
Информация об этом есть в документации.

Если вкратце - разница состоит в том, как будет использоваться результат трансформации.
  • ModelTransformer преобразует данные элемента формы для сохранения в модели или получения данных из модели в форму,
  • ViewTransformer преобразует данные элемента формы для рендера во view или получения данных из запроса в форму,
Ответ написан
Комментировать
BoShurik
@BoShurik Куратор тега Symfony
Symfony developer
https://symfony.com/doc/current/form/data_transfor...
https://github.com/symfony/symfony/blob/5.4/src/Sy...

В большинстве случаев они одинаковые за счет того, что нормализованные данные равны данным, которые пришли в форму.

По ссылке выше хороший пример:
В приложении дата хранится в строке в формате Y-m-d (1), внутри формы используется объект DateTime (2), а для вывода пользователю используется локализованная строка либо набор селектов (3).

Вот тут нам нужно будет использовать ModelTransformer чтобы преобразовать строку (1) в объект (2) и использовать ViewTransformer чтобы в зависимости от опций, переданных в форму, преобразовать объект (2) в строку или селекты (3)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы