gpt4 book ai didi

forms - Symfony 4 表单集合类型 : make FileType element required for new rows only

转载 作者:行者123 更新时间:2023-12-01 03:10:49 27 4
gpt4 key购买 nike

我有一组图像,我希望能够以 Symfony 4 形式添加/更新/删除这些图像。

为了为这些图像创建一个表单,我使用了一个带有 FileType 的自定义表单:

public function buildForm(FormBuilderInterface $builder, array $options) {

$builder
->add('image', FileType::class, array(
'data_class' => null
))
;

}

然后,我使用一个充满上述表单实例的 CollectionType 来为数组中的每个图像呈现一个表单,使用“allow_add”和“allow_delete”,这样我就可以通过 JavaScript 添加/删除行。
public function buildForm(FormBuilderInterface $builder, array $options) {

$builder->add('imagesets', CollectionType::class, array(
'entry_type' => ImageType::class,
'entry_options' => array('label' => false),
'allow_add' => true,
'allow_delete' => true
));
}

这适用于添加新图像,但在更新现有图像时,不应需要 FileType 元素,只应为新行需要它。

问题:如何使现有图像不需要 FileType,但所有新行都需要?

(注意,我会将普通数组传递给这些表单对象,而不是 Doctrine 实体。)

最佳答案

您应该添加一个 EventListener到您的 ImageType 表单并修改所需的属性,如果对象不是新的(或不为空)。请记住,将与前一个同名的第二个元素添加到表单中,将替换它。

$builder
->add('image', FileType::class, array(
'data_class' => null,
'required' => true,
))
;

$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
// get the form object
$form = $event->getForm();
// get the entity/object data
$image = $event->getData();
// if it is new, it will be null
if(null !== $image) {
// modify the input
$form->add('image', FileType::class, array(
'data_class' => null,
'required' => false,
))
;
});
}

关于forms - Symfony 4 表单集合类型 : make FileType element required for new rows only,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52475785/

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