gpt4 book ai didi

php - Symfony2 禁用选择

转载 作者:可可西里 更新时间:2023-11-01 12:53:23 24 4
gpt4 key购买 nike

我正在尝试在 Symfony2 中实现动态表单。形式很简单,首先用户选择一个经纪商,然后根据那个经纪商选择一个账户。因此,在选择经纪人之前,该帐户将被禁用。

在文本输入的情况下,read_only => true 可能是一个解决方案,但 select 没有属性 readonly。所以,我禁用了选择,然后尝试使用 jQuery 启用选择:

$('#form select').prop('disabled', false);

问题是在服务器端,Symfony 无法处理禁用的表单字段。它的值被简单地设置为 null。

我想到了可能的解决方案。首先,我可以在 Controller 中手动设置字段值,因为我测试过表单字段值实际上在请求参数中,Symfony 只是忽略处理它并将其映射到对象。我认为它会起作用,但它并不是很好的解决方案。

其次,我可以通过一些客户端黑客来禁用选择,或者向表单添加一个隐藏的输入并使用 Javascript 手动设置它的值。

这里有标准的解决方案吗?

我的表单实体如下所示:

$builder->add('broker', 'entity', array(
'class' => 'MyBundle:Broker',
'property' => 'name',
'query_builder' => function(BrokerRepository $br) {
return $br->getActiveBrokersQuery();
},
'required' => true,
'empty_value' => 'Choose a broker',
));

$builder->add('accountType', 'entity', array(
'class' => 'MyBundle:AccountType',
'empty_value' => 'Choose a broker first',
'disabled' => true,
));

如果我不禁用选择,一切正常,Symfony 可以完美地处理请求。

最佳答案

根据 hakre 的建议,我设法解决了这个问题。所以我需要告诉表单该字段不再被禁用。因此,我向表单添加了一个 PRE_SUBMIT 事件,我在其中将 accountType 字段的禁用值设置为 false。

$builder->addEventListener(
FormEvents::PRE_SUBMIT,
function(FormEvent $event) {
$event->getForm()->add('accountType', 'entity', array(
'class' => 'XXBundle:AccountType',
'empty_value' => 'Choose a broker first',
'disabled' => false
));
}
);

感谢您的建议!

关于php - Symfony2 禁用选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20857045/

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