TYPO3 11:将 t3 文件 uri 转换为文件标识符

TYPO3 11: convert t3 file uri into file identifier

如何将 TYPO3 文件 uri t3://file?uid=54 转换为可用于其他需要文件标识符的 TYPO3 方法? 文件 uri 由选择 XML 文件的 flexform 返回。应该阅读此 XML 文件。 但是我在 TYPO3 核心中找不到有用的 API 函数。

$paramTestFile = 't3://file?uid=54';
$xmlString = GeneralUtility::getURL($paramTestFile);

以上代码对于 TYPO3 URI 失败。

uid=54 的文件引用位于“fileadmin/example.xml”。 Filelist 后端模块显示此文件的详细信息。 但是,我在 PHP 代码中也需要此文件路径才能读取文件。

use TYPO3\CMS\Core\LinkHandling\FileLinkHandler;

$fileHandler = GeneralUtility::makeInstance(FileLinkHandler::class);
$fileInfo = $fileHandler->asString($paramTestFile);

无法在上面的例子中使用$paramTestFile。 class FileLinkHandler 及其方法 asString 与我需要的完全相反。

$content = @file_get_contents($url);

但是读取方法需要绝对文件路径。如何将 FAL 文件 URI 转换为文件标识符?

use TYPO3\CMS\Core\Resource\StorageRepository;

$storageRepository = GeneralUtility::makeInstance(StorageRepository::class);
$defaultStorage = $storageRepository->getDefaultStorage();
$fileInfo = $defaultStorage->getFileByIdentifier($paramTestFileIdentifier);

要解析 t3://file... URN,请使用 TYPO3\CMS\Core\LinkHandling\LinkService::resolve(). This method will return an array with a key file containing a TYPO3\CMS\Core\Resource\FileInterface。这也适用于其他 URN,但会 return 另一个数组结构。

然后使用getContents() method of the FileInterface最终得到文件内容

这部分核心的文档不是很详细,所以我已经直接链接到相关资源。