2017-01-11 5 views
2

У меня есть проблема с использованием следующих CallBackTransformer:Symfony трансформатор всегда получает нулевое значение

$builder->add(
    $builder 
     ->create('codes', 'hidden') 
     ->addModelTransformer(new CallbackTransformer(
      function ($codesCollection) { 
       if (!$codesCollection) { 
        return "{}"; // This is always returned 
       } 

       return implode(",", $codeCollection->toArray()); 
      }, 
      function ($codesString) { 
       return $codesString; 
      } 
     )) 
    ) 
); 

codes свойство объекта, для которого используется эта форма многие-ко-многим, и в Я тестирую, я проверил, что значение установлено как ожидалось.

Обратный вызов обратного преобразования возвращает ожидаемую строку ($codeString), однако обратный вызов преобразования получает значение null в качестве параметра каждый раз. Я ожидаю, что это будет ArrayCollection, которое я получаю при вызове getCodes на сущности.

Что я могу делать неправильно в этом случае?

ответ

0

Оказалось, что было добавлено FormEvents::PRE_SET_DATA, которое было прикреплено к полю, и даже несмотря на то, что оно вообще не изменяло значения, это привело к тому, что значение было равно нулю в трансформаторе. Я изменил свое событие на FormEvents::POST_SET_DATA, которое решило проблему.

1

Трансформаторы данных используются для перевода данных для поля в формате, который может быть отображен в форме (и обратно на submit). Первый преобразует исходное значение в формат, который будет использоваться для визуализации поля.

Так, «данные» и «исходное значение» относятся к начальному значению этого поля от базового объекта. Чтобы увидеть другой результат, вам нужно поместить значение по умолчанию в поле codes (если оно еще не приходит из БД, например). В противном случае это всегда будет null.

+0

> Чтобы увидеть другой результат, вам нужно поместить значение по умолчанию в поле кодов (если оно еще не приходит из БД, например). Дело в том, что я ожидаю, что он получит значение из базы данных, где «коды» - это отношение «многие ко многим», которое я подтвердил, что на самом деле хранит данные. Поэтому я ожидаю, что данные («ArrayCollection» связанных объектов) будут переданы в обратный вызов преобразования. Я ошибаюсь в ожидании, что так будет? – madshvero

+0

Я думаю, вы должны показать нам эту часть, тогда вы вызываете этот тип формы. – yceruto

 Смежные вопросы

  • Нет связанных вопросов^_^