Предварительно заполнение значения формы немаркированного поля

У меня есть форма, привязанная к сущности, но у нее также есть дополнительное неотображенное поле: (из класса FormType)

$builder
    ->add('name')
    ->add('qoh')
    ->add('serialNumber', 'text', array('mapped' => false, 'required' => false))

Я хочу предварительно заполнить поле serialNumber от контроллера информацией, взятой из URL-адреса запроса. Самый близкий метод, который я нашел, будет следующим:

$form->setData(mixed $modelData)

но API не указывает, какую форму "$ modelData" принимает, и ничего, что я пробовал, не имеет никакого эффекта.

Ответ 1

Кто-то из канала IRC Symfony дал мне этот ответ, и они отказались опубликовать его здесь:

$form->get('serialNumber')->setData($serial_number);

Ответ 3

Вы можете использовать События формы. Например, если вы хотите установить данные из базы данных в не отображаемое поле, вы можете использовать POST_SET_DATA:

class AddNonMappedDataSubscriber implements EventSubscriberInterface
{
protected $em;

public function __construct(EntityManager $em)
{
    $this->em = $em;
}

public static function getSubscribedEvents()
{
    return array(
        FormEvents::POST_SET_DATA => 'postSetData'
    );
}

public function postSetData(FormEvent $event){
    $form = $event->getForm();
    $myEntity = $event->getData();

    if($myEntity){
        $serialNumber = $myEntity->getNumber();
        $form->get('serialNumber')->setData($serialNumber);
         }
     }
}