Хотя это не решает мою проблему полностью, это конкретное решение может помочь кому-то еще в подобном затруднительном положении ...
Для того, чтобы внедрить (я свободно использую термин) объект в мои данные формыиспользуя расширение формы и прослушиватель событий.
Расширение:
<?php
namespace Acme\DemoBundle\Form\Extension;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\Form\FormEvents;
use Acme\DemoBundle\Form\EventListener\MyListener;
class FormTypeMyExtension extends AbstractTypeExtension
{
public function getExtendedType()
{
return 'form'; // because we're extending the base form, not a specific one
}
public function buildForm(FormBuilder $builder, array $options)
{
$listener = new MyListener($this->security, $this->em);
$builder->addEventListener(FormEvents::SET_DATA, array($listener, 'onSetData'));
}
}
Прослушиватель:
<?php
namespace Acme\DemoBundle\Form\EventListener;
use Symfony\Component\Form\Event\FilterDataEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Security\Core\SecurityContext;
use Doctrine\ORM\EntityManager;
class MyListener
{
public function onSetData(FilterDataEvent $event)
{
// I use form.set_data because it has a method to set data to the form.
$form = $event->getForm();
$data = $event->getData();
// do things to the form or the data.
}
}
(Нужна была помощь от с этого сайта .)
Это позволяет вам делать что угодно с формой или данными формы для каждой формы.Вот как я вводил объект изначально.Моя проблема в том, что встроенные формы, по-видимому, не вызывают setData()
(предположительно, потому что у первого объекта уже есть другие объекты).
Я работал над этим весь день, поэтому, если мой ответ плохо сформулированЖалуйся, а утром исправлю!