TYPO3中如何从站点配置获取所有已知基础URL(含变体及多语言)
TYPO3 9/10 站点URL获取方案
你可以直接使用TYPO3核心封装的SiteFinderAPI实现需求,全程不需要自行解析遍历站点配置文件:
实现步骤
- 获取
TYPO3\CMS\Core\Site\SiteFinder实例:推荐使用依赖注入方式注入,非DI上下文可以通过GeneralUtility::makeInstance生成。 - 调用
getAllSites()方法获取当前实例下所有站点的配置对象。 - 遍历每个站点对象,分别拉取默认基础URL、多语言对应URL、站点变体URL。
代码示例
<?php use TYPO3\CMS\Core\Site\SiteFinder; use TYPO3\CMS\Core\Utility\GeneralUtility; // 依赖注入上下文请直接注入SiteFinder,无需手动生成实例 $siteFinder = GeneralUtility::makeInstance(SiteFinder::class); $allSites = $siteFinder->getAllSites(); $allValidBaseUrls = []; foreach ($allSites as $site) { // 收录站点默认基础URL $defaultBase = (string)$site->getBase(); if (!in_array($defaultBase, $allValidBaseUrls)) { $allValidBaseUrls[] = $defaultBase; } // 收录站点所有语言对应的基础URL foreach ($site->getAllLanguages() as $language) { $langBase = (string)$language->getBase(); if (!in_array($langBase, $allValidBaseUrls)) { $allValidBaseUrls[] = $langBase; } } // 收录站点配置的所有变体URL(含开发、测试等不同环境的配置) foreach ($site->getBaseVariants() as $baseVariant) { $variantBase = (string)$baseVariant->getBase(); if (!in_array($variantBase, $allValidBaseUrls)) { $allValidBaseUrls[] = $variantBase; } } }
后续使用
最终得到的$allValidBaseUrls数组已经包含了你需要的所有已知基础URL,你可以直接提取每个URL的域名部分,和用户输入URL的域名做比对即可完成本地URL校验逻辑。
内容的提问来源于stack exchange,提问作者Rudy Gnodde
相关产品推荐
相关产品推荐

