gpt4 book ai didi

forms - 在表单事件中为某个表单字段添加模型转换器

转载 作者:行者123 更新时间:2023-12-03 17:42:41 24 4
gpt4 key购买 nike

我发现的唯一有效方法是在表单类型的 buildForm 方法中添加模型转换器,如下所示:

public function buildForm(FormBuilderInterface $builder, array $options)
{
$transformer = new IssueToNumberTransformer($entityManager);
$builder->add(
$builder->create('issue', 'text')->addModelTransformer($transformer)
);
}

但是我有一个表单域,它在另一个表单域具有有效值时显示,所以我宁愿在 FormEvent::PRE_SET_DATA 中创建表单域。事件。

1.一种错误的方式
->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($builder) {
/** @var $order \VMSP\OrderBundle\Entity\OrderInterface */
$order = $event->getData();
$form = $event->getForm();
/** @var $serviceType \VMSP\StoreBundle\Entity\ServiceType */
$serviceType = $order->getServiceType();

//only home service needs user's address
if ($serviceType && $serviceType->getType() == ServiceType::TYPE_HOME_SERVICE) {
//won't work
$form->add(
$builder->create('address','hidden')
->addModelTransformer($this->addressTransformer),
array(
'label' => 'vmsp_order.contact.form.address',
)
);
}
}

有人建议
$form->add(
$builder->create('address', 'hidden')
->addModelTransformer($this->addressTransformer),
array( 'label' => 'vmsp_order.contact.form.address')
);

不幸的是,它抛出了这个错误:

Expected argument of type "string, integer or Symfony\Component\Form\FormInterface", "Symfony\Component\Form\FormBuilder" given



2.另一种错误方式
if ($serviceType && $serviceType->getType() == ServiceType::TYPE_HOME_SERVICE) {
$form->add(
'address',
'hidden',
array('label' => 'vmsp_order.contact.form.address')
);

$form->get('address')
->getConfig()
->addModelTransformer($this->addressTransformer);
}

得到错误:

FormConfigBuilder methods cannot be accessed anymore once the builder is turned into a FormConfigInterface instance.



我列出了上面两种错误的方法,因为我发现很多帖子都说这些方法是对的,当然,它们不是。这篇文章是与 symfony2-form-events-and-model-transformers 一样的问题,但那个答案不是我需要的,所以我的问题是,有什么方法可以在某个表单字段的表单事件中添加模型转换器?

最佳答案

您的“1.一种错误方式”不起作用,因为 $builder->addModelTransformer()返回 FormConfigBuilderInterface但是 $form->add()期待 FormInterface (请参阅您的错误消息)。
要使其工作,只需添加 getForm() :

$form->add(
$builder->create('address','hidden')
->addModelTransformer($this->addressTransformer)
->getForm() // Creates the form
...

关于forms - 在表单事件中为某个表单字段添加模型转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32043249/

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