首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在调度程序命令中生成前端URI (TYPO3 9)

如何在调度程序命令中生成前端URI (TYPO3 9)
EN

Stack Overflow用户
提问于 2020-03-17 22:49:02
回答 2查看 1.3K关注 0票数 2

在TYPO3 v9的scheduler命令中生成前端URI的最佳方法是什么。

我见过手动初始化TSFE的尝试,但对我来说,这似乎很可疑。还有别的办法吗?

EN

回答 2

Stack Overflow用户

发布于 2020-03-17 23:26:45

在任何环境(FE/BE/CLI)中创建链路的正确方法是使用PageRouter。此路由器始终连接到site,因此您需要首先检索正确的站点,例如使用SiteFinder。在此之后,您可以使用PageRouter::generateUri()

完整示例:

代码语言:javascript
复制
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的行为,则需要自己执行此操作:

代码语言:javascript
复制
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,
    ],
];
票数 18
EN

Stack Overflow用户

发布于 2020-03-18 00:13:02

根据您的需求,@mathias-brodala所描述的原生方式可能还不够。在这些情况下,您将需要一个适当的TypoScript,否则您将无法获得可能影响链接生成的所有TSFE设置。

对于这些情况,你基本上需要自己创建一个TypoScriptFrontendController实例,调用setup方法,并根据你的用例注入真实的或模拟的依赖项,如FrontendUserAuthentication

例如,可以在rx_scheduled_social extension中找到TYPO3v9的工作解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60724764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档