我有一个实体ClientFileAction
,它是OneToMany
关系中的实体Attachment
的父实体。Attachment
不仅包含文件路径,还包含有关文件的信息,如标题,上传日期等。Attachment:
#[ORM\Column(type: 'string', length: 255)]
private $title;
#[ORM\Column(type: 'datetime')]
private $uploaded;
#[ORM\Column(type: 'string', length: 255)]
private $filePath;
在创建表单类型AttachmentType
并一对一上传文件时,没有问题:AttachmentType:
$builder
->add('title', null, ['label' => 'Title', 'required' => true])
->add('attachmentFile', FileType::class, [
'label' => 'File',
'mapped' => false,
'required' => true,
'constraints' => [
new File([
'maxSize' => '1024k',
])
],
]);
在控制器中,我只是得到上传的文件与$attachmentFile = $form->get('attachmentFile')->getData();
,然后继续通常的UploadedFile::move()
的东西。
问题:父窗体中嵌入附件类型
但是当我尝试上传多个附件(不仅仅是文件,还有带有标题字段的附件)时,上传的文件字段似乎无法到达。ClientFileActionType:
$builder
->add('description', null, ['label' => 'Description', 'required' => true])
->add('attachments', CollectionType::class, ['label' => false,
'allow_add' => true,
'by_reference' => false,
'entry_type' => AttachmentType::class,
'entry_options' => ['label' => false],
]);
当我将AttachmentType
作为 Collection 嵌入到ClientFileActionType
中时,在控制器中我找不到获取上传文件的方法:
$attachments = $form->get('attachments')->getData();
$attachments
是Attachment
的数组,由于attachmentFile
不是Map字段,因此在$form->handleRequest($request);
上消失。
我需要一种方法来获取子窗体的未MapattachmentFile
字段,类似于:
$attachmentFiles = $form->get('attachments.attachmentFile')->getData();
这会抛出一个错误。有正确的方法吗?
1条答案
按热度按时间fnvucqvd1#
我在打问题的时候找到了正确的方法。
上载的文件位于
Request
对象中,因此此文件上载管理方案的正确方法可能是: