我尝试根据表单中的其他数据修改表单中的某些数据。来自the docs:
在Form :: setData()方法的开头调度FormEvents :: PRE_SET_DATA事件。它可以用于:
- 修改预填充期间提供的数据
- 根据预先填充的数据修改表单(动态添加或删除字段)。
这条粗线使我相信应该可以在buildForm
函数中执行以下操作:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addEventListener(\Symfony\Component\Form\FormEvents::PRE_SET_DATA,
function(\Symfony\Component\Form\FormEvent $event) use ($options) {
if ($options['default_to_nickname']) {
$securityContext = $this->container->get('security.context');
$nickname = null;
if ($securityContext->isGranted('IS_AUTHENTICATED_FULLY')) {
$user = $securityContext->getToken()->getUser();
$nickname = $user->getNickName();
if (isset($nickname))
{
$options['data'] = $nickname;
//$event->setData($nickname); //this doesn't work either
}
}
}
}
);
}
但是,options['data'] = $nickname;
和$event->setData($nickname);
都不会导致表单填充正确的数据。我可以看到,当我调用$event->setData($nickname);
时,在FormEvent对象中设置了数据,但是当实际呈现表单时,数据未设置。我期待错误的事吗?我已经研究过在此之后是否有其他东西可能会修改它,并且没有。非常欢迎任何帮助!
答案 0 :(得分:0)
您必须致电$event->getForm()->get('your_property')->setData($nickname)
。如果该属性尚不存在,请将get()
方法替换为add($property, $type, ['data' => $nickname])
。