在TYPO3 v9的scheduler命令中生成前端URI的最佳方法是什么。
我见过手动初始化TSFE的尝试,但对我来说,这似乎很可疑。还有别的办法吗?
发布于 2020-03-17 23:26:45
在任何环境(FE/BE/CLI)中创建链路的正确方法是使用PageRouter。此路由器始终连接到site,因此您需要首先检索正确的站点,例如使用SiteFinder。在此之后,您可以使用PageRouter::generateUri()。
完整示例:
use TYPO3\CMS\Core\Site\SiteFinder;
use TYPO3\CMS\Core\Utility\GeneralUtility;
$site = GeneralUtility::makeInstance(SiteFinder::class)->getSiteByPageId($pageUid);
$arguments = [
'foo' => 1,
];
$uri = (string)$site->getRouter()->generateUri((string)$pageUid, $arguments);请注意,此UriBuilder对Extbase一无所知,并通过$arguments传递给URI,因此,如果您需要模仿Extbase API的行为,则需要自己执行此操作:
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Object\ObjectManager;
use TYPO3\CMS\Extbase\Service\ExtensionService;
$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
$extensionService = $objectManager->get(ExtensionService::class);
$argumentsPrefix = $extensionService->getPluginNamespace($extensionName, $pluginName);
$arguments = [
$argumentsPrefix => [
'action' => $actionName,
'controller' => $controllerName,
],
];发布于 2020-03-18 00:13:02
根据您的需求,@mathias-brodala所描述的原生方式可能还不够。在这些情况下,您将需要一个适当的TypoScript,否则您将无法获得可能影响链接生成的所有TSFE设置。
对于这些情况,你基本上需要自己创建一个TypoScriptFrontendController实例,调用setup方法,并根据你的用例注入真实的或模拟的依赖项,如FrontendUserAuthentication。
例如,可以在rx_scheduled_social extension中找到TYPO3v9的工作解决方案。
https://stackoverflow.com/questions/60724764
复制相似问题