假设我们有一个在表单生成器中定义的表单,如下所示:
$builder
->add('username', 'text', ['disabled' => false]);
我们可以改变属性disabled
一个的form.username
领域后$form
实例创建?
我发现您可以使用
$formBuilder->get('username')->getAttributes('data_collector/passed_options')['data_collector/passed_options']
然后用setAttributes
相应的替换。
但是它看起来很脏。
我发现的另一种替代方法是$formBuilder->remove
并将->add()
元素返回。这也是丑陋的。
那么,是否有任何适当的设置方法?
场景:先构建表单,然后进行验证,以防万一无效,我需要将字段标记为禁用并再次呈现。
这是一个简化的示例,它演示了如何使用动态表单元素进行操作,默认情况下,名称字段是禁用的,并且仅在提供成员编号时才启用:
class ExampleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('member_number', 'integer', array(
'required' => false
));
$f = function(FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
$attr = array('disabled' => true);
if (isset($data) && $data['member_number']) {
unset($attr['disabled']);
}
$form->add('name', 'text', $attr);
};
$builder->addEventListener(FormEvents::PRE_SET_DATA, $f);
$builder->addEventListener(FormEvents::PRE_SUBMIT, $f);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句