Я пытаюсь получить dataTransformer работать на поле объекта в Symfony 2.symfony2 применить трансформатор к форме формы объекта - пустой массив?
контекст:
форма отображает паруса, которые пользователь может выбрать (чекбоксы)
это первый шаг в многоэтапном процессе упорядочивания парусов (в последующих шагах отображаются параметры, доступные для каждого паруса, цвета и т. д.)
Это моя форма тип класса:
use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Form\FormBuilderInterface;
use Co\QuoteBundle\Form\DataTransformer\SailCollectionToStringsTransformer;
class PartsTypeStep1 extends AbstractType {
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Co\QuoteBundle\Entity\Parts',));
$resolver->setRequired(array('sailsAvailable', 'em'));
}
public function buildForm(FormBuilderInterface $formBuilder, array $options)
{
$transformer = new SailCollectionToStringsTransformer($options['em']);
$formBuilder->add(
$formBuilder->create('mainsailparts', 'entity', array(
'class' => 'CoQuoteBundle:Mainsail',
'choices' => $options['sailsAvailable']['mains'],
'multiple' => true,
'expanded' => true,
'label' => 'Mainsails',))
->addModelTransformer($transformer)); //line 58
}
public function getName() {
return 'partsStep1';
}
}
Вышеперечисленные работы без ошибок, но не выводит преобразованные данные. Мнение:
__ Race main
__ Cruising main
(__
обозначает флажком)
Однако мнение, что я хочу:
__ Race main ($1400)
__ Cruising main ($800)
трансформатор у меня есть это:
use Symfony\Component\Form\DataTransformerInterface;
use Symfony\Component\Form\Exception\TransformationFailedException;
use Doctrine\Common\Persistence\ObjectManager;
use Co\QuoteBundle\Entity\Sail;
use Doctrine\Common\Collections\ArrayCollection;
class SailCollectionToStringsTransformer implements DataTransformerInterface
{
/**
* @var ObjectManager
*/
private $om;
/**
* @param ObjectManager $om
*/
public function __construct(ObjectManager $om)
{
$this->om = $om;
}
/**
* Transforms a collection of sails to a collection of strings.
* @param ISail|null $sail
* @return string
*/
public function transform($sailCollection)
{
if (null === $sailCollection) {
return null;
}
$labels = new ArrayCollection();
foreach($sailCollection as $sail){
$labels[] = $sail->getName().' ($'.$sail->getBuildPrice().')';
}
return $labels;
}
//reverse transformer... not the issue (yet) because the forward transformer doesn't work
}
Когда запуская это через отладчик netbeans, пустым массивом передается трансформатор. Однако, если я меняю строку 58 на ->addViewTransformer($transformer));
и отлаживаю, она правильно передает два логических значения с идентификатором паруса в качестве ключей массива к трансформатору. К сожалению, я не могу использовать ViewTransformer
, потому что это больше не содержит исходные строки для изменения.
Почему массив ArrayCollection, который должен содержать основные паруса, передается трансформатору в виде пустого ArrayCollection? Функция возвращает пустую коллекцию $labels
.
Я не уверен, что я делаю неправильно ... Помощь очень ценится !!!! Спасибо.