Helhum upload示例替换文件失效,TYPO3 9报错‘标识属性非UID’如何解决?
解决TYPO3 9中Helhum Upload示例替换文件时的UID错误问题
针对编辑记录替换文件时提示"The identity property "xxx.pdf" is no UID"的问题,以下是具体解决步骤:
修正表单模板的文件标识传递
编辑场景下,表单必须传递文件的UID而非文件名作为标识。修改Fluid模板中文件字段的渲染逻辑,在编辑状态时输出隐藏字段传递文件UID:<f:if condition="{file}"> <input type="hidden" name="yourFileField[identity]" value="{file.uid}" /> <p>当前文件: {file.name}</p> </f:if> <input type="file" name="yourFileField" accept=".pdf" />确保
yourFileField对应你TCA中配置的字段名,{file}是当前记录关联的文件对象。调整控制器的编辑提交处理逻辑
在控制器的update方法中,确保通过UID正确加载原有文件对象,而非通过文件名查找。示例代码片段:public function updateAction(YourDomainModel $yourModel) { $fileField = $this->request->getArgument('yourFileField'); if (isset($fileField['identity']) && is_numeric($fileField['identity'])) { // 通过UID加载原有文件 $existingFile = $this->fileRepository->findByUid((int)$fileField['identity']); // 处理文件替换逻辑 } $this->yourRepository->update($yourModel); // 后续跳转逻辑 }检查并修正TCA配置
确保文件字段的TCA配置符合TYPO3 9的要求,正确关联sys_file表:'your_file_field' => [ 'label' => 'PDF文件', 'config' => [ 'type' => 'file', 'allowed' => 'pdf', 'maxitems' => 1, 'foreign_table' => 'sys_file', 'foreign_table_field' => 'uid_local', 'show_thumbs' => true, ], ],重点确认
foreign_table和foreign_table_field配置正确,避免文件关联逻辑出错。适配文件转换器的标识解析逻辑
如果使用了UploadedFileReferenceConverter,需要确保它能正确识别编辑场景下的UID标识。修改转换器中解析identity的逻辑:// 在转换器的convertFrom方法中 if (isset($source['identity']) && is_numeric($source['identity'])) { $file = $this->fileRepository->findByUid((int)$source['identity']); if ($file instanceof FileInterface) { return $file; } } // 新增文件的处理逻辑避免将文件名当作UID进行解析,导致错误提示。
内容的提问来源于stack exchange,提问作者Ralf
相关产品推荐
相关产品推荐

