Ответ 1
Кто-то из канала IRC Symfony дал мне этот ответ, и они отказались опубликовать его здесь:
$form->get('serialNumber')->setData($serial_number);
У меня есть форма, привязанная к сущности, но у нее также есть дополнительное неотображенное поле: (из класса FormType)
$builder
->add('name')
->add('qoh')
->add('serialNumber', 'text', array('mapped' => false, 'required' => false))
Я хочу предварительно заполнить поле serialNumber от контроллера информацией, взятой из URL-адреса запроса. Самый близкий метод, который я нашел, будет следующим:
$form->setData(mixed $modelData)
но API не указывает, какую форму "$ modelData" принимает, и ничего, что я пробовал, не имеет никакого эффекта.
Кто-то из канала IRC Symfony дал мне этот ответ, и они отказались опубликовать его здесь:
$form->get('serialNumber')->setData($serial_number);
Вы можете предварительно заполнить поле в twig (Установить значение по умолчанию для поля формы Symfony 2 в Twig).
...
{{ form_widget(form.serialNumber, { value : serialNumber }) }}
...
Вы можете использовать События формы. Например, если вы хотите установить данные из базы данных в не отображаемое поле, вы можете использовать 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);
}
}
}