我有一个绑定到实体的表单,但它还有一个额外的未映射字段: (来自FormType类)
$builder
->add('name')
->add('qoh')
->add('serialNumber', 'text', array('mapped' => false, 'required' => false))
我想从控制器预先填充serialNumber字段,其中包含从请求URL获取的信息。我找到的最接近的方法是:
$form->setData(mixed $modelData)
但API没有指定'$ modelData'采用什么形式,我尝试过的任何内容都没有任何效果。
答案 0 :(得分:33)
Symfony的IRC频道有人给了我这个答案,他们拒绝在这里发布:
$form->get('serialNumber')->setData($serial_number);
答案 1 :(得分:7)
您可以在树枝(Set default value of Symfony 2 form field in Twig)中预先填充该字段。
...
{{ form_widget(form.serialNumber, { value : serialNumber }) }}
...
答案 2 :(得分:7)
您可以使用Form Events。例如,如果要将数据从数据库设置为非映射字段,可以使用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);
}
}
}