我有一个前端扩展,登录用户应添加/编辑 sys_file 记录。
我尝试像这样更新文件元数据(简化):
$uid = (int)$this->request->getArgument('file');
$resourceFactory = \TYPO3\CMS\Core\Resource\ResourceFactory::getInstance();
$file = $resourceFactory->getFileObject($uid);
$file->updateProperties(array(
'title' => $this->request->getArgument('title'),
'keywords' => $this->request->getArgument('keywords'),
'description' => $this->request->getArgument('description'),
'copyright' => $this->request->getArgument('copyright'),
'modification_date' => time()
));
$this->fileRepository->update($file);
$this->addFlashMessage(LocalizationUtility::translate('messages.success.file'));
$this->persistenceManager->persistAll();
Run Code Online (Sandbox Code Playgroud)
persistenceManager 和 fileRepository 通过以下方式注入:
/**
* fileRepository
*
* @var \TYPO3\CMS\Core\Resource\FileRepository
* @inject
*/
protected $fileRepository = NULL;
/**
* @var \TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager
* @inject
*/
protected $persistenceManager;
Run Code Online (Sandbox Code Playgroud)
并且通常我没有收到任何错误,会显示 Flash 消息,流体表单甚至会显示表单内的新数据,但实际上并未保存。
有什么方法可以调试/解决这个问题?似乎 $fileRepository 实际上并没有执行“更新”语句,是否有某种我需要在前端规避的权限检查?
小智 5
一种旧线程,但有一个在 7.6 和 8.x 中有效的解决方案,因为 7.6 中的存储库使用$GLOBAL['TYPO3_DB']
8.x 中它已经迁移到 Doctrine,因此无需重写您的代码。也许它可以节省一些时间。
使用TYPO3\CMS\Core\Resource\Index\MetaDataRepository
存储库并通过 objectManager 加载它。
$objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\Object\ObjectManager');
$metadata = $objectManager->get('TYPO3\CMS\Core\Resource\Index\MetaDataRepository');
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样填充元数据
$metadata->update($fileUid, $metadataInput);
Run Code Online (Sandbox Code Playgroud)
update 方法需要两个参数,文件 uid 和一个包含 db 字段名称和值的数组
归档时间: |
|
查看次数: |
1833 次 |
最近记录: |