You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:23:25