我有一个前端扩展,登录用户应添加/编辑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();
persistenceManager和fileRepository通过以下方式注入:
/**
* fileRepository
*
* @var \TYPO3\CMS\Core\Resource\FileRepository
* @inject
*/
protected $fileRepository = NULL;
/**
* @var \TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager
* @inject
*/
protected $persistenceManager;
通常我没有错误,显示flash消息,流体形式甚至显示表单中的新数据,但实际上没有保存。
任何调试/解决方法?似乎$ fileRepository实际上没有执行"更新"声明,是否有某种权限检查我需要在前端规避?
答案 0 :(得分:4)
有点旧线程但有一个解决方案适用于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');
然后您可以像这样填充元数据
$metadata->update($fileUid, $metadataInput);
update方法需要两个参数,即文件uid和带有db字段名称和值的数组
答案 1 :(得分:0)
据我所知,您必须自己使用更新查询更新它们:
$GLOBALS['TYPO3_DB']->->exec_UPDATEquery('sys_file_metadata', 'file = ' . $fileUid, array('modification_date' => time()));