gpt4 book ai didi

forms - Symfony2 表格 : enable/disable field from listener

转载 作者:行者123 更新时间:2023-12-05 08:43:27 24 4
gpt4 key购买 nike

我需要根据给定字段的值禁用/重新启用表单字段。为了实现它,我在 onPreSubmit 事件上使用了一个监听器。然后,如果一个字段应该被禁用,它会被再次添加到表单中,就像

$form->add('name', 'text', array("disabled" => "disabled");

这在某种意义上非常有用:如果一个字段被启用但应该被禁用,那么结果是好的。换句话说,如果一个字段被禁用,那么这个字段就不会被发送。在监听器中,该字段已启用,但在最终结果中,初始值不再存在。

我假设,因为该字段被禁用,它没有被发送,所以 Symfony 认为它有一个空值。来自 preSubmit 或 Submit 事件的监听器,如果我这样做:

$event->getData()

然后所有在表单中但不在 POST 数据中的字段都设置为空。有没有办法简单地激活字段,保持初始值?或者不考虑缺失字段的值?

最佳答案

总比没有好:)

今天我遇到了同样的问题,总之你不能使用监听器更改字段的选项,因为选项属性是私有(private)的并且只有 getOption 和 getOptions,但是你可以删除和添加字段的克隆

public function buildForm(FormBuilderInterface $builder, array $options)
{
$this->buildUserForm($builder, $options);

$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function (FormEvent $event) {
$form = $event->getForm();
$user = $event->getData();
if($user->getBirthday()){
$this->disableField($form->get('birthday'));
}
}
);
}

private function disableField($field){
$parent = $field->getParent();
$options = $field->getConfig()->getOptions();
$name = $field->getName();
$type = $field->getConfig()->getType()->getName();
$parent->remove($name);
$parent->add($name, $type, array_merge($options,['disabled' => true]));
}

关于forms - Symfony2 表格 : enable/disable field from listener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29850568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com