TYPO3 12.4:以ext结尾的扩展Composer包资源目录无法软链至public/_assets
关于TYPO3 12.4.4扩展资源目录软链接问题的修改合理性分析
在TYPO3 12.4.4版本中,当扩展的Composer包供应商名称以“ext”结尾(例如typo3_ext/my_extension)时,扩展的Resources/Public目录无法被软链接到public/_assets目录,这个问题的根源在于vendor/typo3/cms-core/Classes/Composer/PackageArtifactBuilder.php第264行的路径匹配逻辑。
原代码的问题
原代码的判断条件是:
if (str_contains($path, 'ext/' . $extensionKey) || !file_exists($fileSystemResourcesPath)) { continue; }
这里的str_contains匹配没有限定前缀,当供应商名称中包含ext/子串(比如typo3_ext/里的ext/)时,会误触发这个条件,导致代码直接跳过当前扩展的软链接创建流程,最终造成Resources/Public目录无法被正确链接。
修改后的逻辑优化
修改后的代码调整了匹配规则:
if (str_contains($path, '/ext/' . $extensionKey) || !file_exists($fileSystemResourcesPath)) { continue; }
通过在ext/前增加前置斜杠,明确了匹配的是路径中独立的ext/[extensionKey]段,而非任意位置的ext/子串。这就避免了供应商名称包含ext时的误匹配,确保只有真正需要跳过的路径才会触发continue,符合逻辑预期。
修改合理性总结
这个修改是完全合理的,它精准修复了原代码的逻辑漏洞:原代码的路径匹配范围过宽,误将供应商名称中的子串判定为目标路径;修改后通过限定匹配上下文,缩小了判断范围,确保扩展资源目录的软链接流程能正常执行,解决了特定命名场景下的功能异常。
内容的提问来源于stack exchange,提问作者Typonator
相关产品推荐
相关产品推荐

