TYPO3 7.6:已知文件路径如何获取sys_file_metadata.title
快速获取TYPO3 7.6中文件的metadata标题(无需额外类/文件)
嘿,在TYPO3 7.6里确实没有ConnectionPool(那是8.x版本才引入的),咱们直接用老版本原生的数据库操作或者Extbase自带的文件仓库就能快速搞定,完全不用加额外的类或者文件,直接在插件控制器里写就行!
方法一:原生数据库查询(最直接)
TYPO3 7.6还是用$GLOBALS['TYPO3_DB']来处理数据库操作,咱们直接关联sys_file和sys_file_metadata表,通过文件的identifier匹配出对应的标题:
public function yourPluginAction() { // 替换成你实际拿到的文件identifier $targetIdentifier = '/user_upload/your-document.pdf'; // 获取数据库连接实例 $db = $GLOBALS['TYPO3_DB']; // 构建安全的查询语句(用fullQuoteStr防止SQL注入) $query = 'SELECT sfm.title FROM sys_file sf INNER JOIN sys_file_metadata sfm ON sf.uid = sfm.file_uid WHERE sf.identifier = ' . $db->fullQuoteStr($targetIdentifier, 'sys_file'); // 执行查询并提取结果 $result = $db->sql_query($query); $fileTitle = ''; if ($row = $db->sql_fetch_assoc($result)) { $fileTitle = $row['title']; } // 记得释放结果集 $db->sql_free_result($result); // 把标题传给视图或者直接使用 $this->view->assign('fileTitle', $fileTitle); }
这个方法的好处是完全原生,不需要依赖Extbase的任何Repository,执行速度也快,而且通过fullQuoteStr做了参数转义,避免SQL注入风险。
方法二:用Extbase的FileRepository(更符合Extbase规范)
如果你更习惯用Extbase的方式,TYPO3 7.6自带了FileRepository,可以直接通过它找到文件对象,再获取metadata的标题:
use TYPO3\CMS\Core\Resource\FileRepository; public function yourPluginAction() { $targetIdentifier = '/user_upload/your-document.pdf'; // 通过ObjectManager获取FileRepository实例 $fileRepository = $this->objectManager->get(FileRepository::class); // 根据identifier查找文件 $matchingFiles = $fileRepository->findByProperty('identifier', $targetIdentifier); $fileTitle = ''; if (!empty($matchingFiles)) { // 取第一个匹配的文件(identifier应该是唯一的) /** @var \TYPO3\CMS\Core\Resource\File $file */ $file = $matchingFiles[0]; // 获取metadata里的title属性 $fileTitle = $file->getProperty('title'); } $this->view->assign('fileTitle', $fileTitle); }
这个方法更符合Extbase的开发习惯,不需要自己写SQL,TYPO3会帮你处理关联和安全问题。
两种方法都不用创建额外的类或者文件,直接在插件控制器的action里写就能生效,选哪个看你自己的习惯啦~
内容的提问来源于stack exchange,提问作者FuFu
相关产品推荐
相关产品推荐

