symfony 表单生成器更新选项字段

问题描述 投票:0回答:2

添加选项字段后是否可以更新它?

$builder
    ->add('examens', 'entity', array(
        'class' => 'TelegrammeExamenBundle:ExamExamen',
        'property'  => 'libelle',
        'required'    => true,
        'empty_value' => 'Sélectionnez un examen',
        //'data' => $this->em->getReference("TelegrammeExamenBundle:ExamExamen", 510),
        'data' => null,
        'query_builder' => function(ExamenRepository $r) {
            return $r->getSelectList();
        },
        'attr' => array('class' => 'bg_white_filet_gris')
    ))
;

如何修改字段选项??? (setOption不存在)

if (...) $builder->get('examens')->setOption('property', 'test');
symfony symfony-forms
2个回答
9
投票

您只需再次

->add()
即可。正如 API 文档对
add
方法的建议: 在表单中添加或替换子项

http://api.symfony.com/2.8/Symfony/Component/Form/FormInterface.html#method_add

这可用于修改表单元素,例如在

FormEvent
中。


或者

FormBuilder
提供了
setAttribute()
方法,可以按如下方式使用:

$builder->get('examens')->setAttribute('property', 'test');

0
投票

前面的答案不会更改字段的选项,但它是属性,这不是同一件事。

我做了这个功能来调整选项:

class Utils
{
    public static function updateOptions(FormBuilderInterface $builder, string $fieldName, array $options) : void {
        $field = $builder->get($fieldName);
        $type = get_class($field->getType()->getInnerType());
        $updatedOptions = array_merge($field->getOptions(), $options);
        $builder->remove($fieldName);
        $builder->add($fieldName, $type, $updatedOptions);
    }
}

使用简单:

Utils::updateOptions($builder, 'selectedShippingService', [
    'disabled' => true,
    'mapped' => false,
    'data' => $this->data->selectedShippingService,
]);
© www.soinside.com 2019 - 2024. All rights reserved.