添加选项字段后是否可以更新它?
$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');
您只需再次
->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');
前面的答案不会更改字段的选项,但它是属性,这不是同一件事。
我做了这个功能来调整选项:
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,
]);