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

And*_*ger 2 typo3 typo3-9.x

在 TYPO3 v9.1 中的调度程序命令中生成前端 URI 的最佳方法是什么?

我已经看到了通过手动初始化 TSFE 的尝试,但对我来说这似乎很可疑。还有其他方法吗?

Mat*_*ala 14

在任何上下文 (FE/BE/CLI) 中创建链接的正确方法是使用PageRouter. 此路由器始终连接到站点,因此您需要首先检索正确的站点,例如使用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);
Run Code Online (Sandbox Code Playgroud)

请注意,此 API 对 Extbase 一无所知并传递$arguments到 URI,因此如果您需要模仿 Extbase 的行为,UriBuilder您需要自己这样做:

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,
    ],
];
Run Code Online (Sandbox Code Playgroud)