14

我有一个绑定到实体的表单,但它还有一个额外的未映射字段:(来自 FormType 类)

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

我想使用从请求 URL 中获取的信息预填充控制器中的 serialNumber 字段。我发现的最接近的方法是:

$form->setData(mixed $modelData)

但是 API 没有指定 '$modelData' 采用什么形式,而且我尝试过的任何东西都没有任何效果。

4

3 回答 3

40

Symfony 的 IRC 频道上有人给了我这个答案,但他们拒绝在这里发布:

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

于 2013-10-18T11:08:08.413 回答
10

您可以使用表单事件。例如,如果要将数据库中的数据设置为非映射字段,可以使用 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);
         }
     }
}
于 2016-04-14T07:08:31.720 回答
8

您可以预先填充 twig 中的字段(在 Twig 中设置 Symfony 2 表单字段的默认值)。

...

{{ form_widget(form.serialNumber, { value : serialNumber }) }}

...
于 2013-10-18T02:42:44.943 回答