To create typolinks in a schedular or CommandController, first we need to initialize the TSFE. Later we can use typoLink_URL() to generate the links.
Below are the steps.
1. Initialize the TSFE
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
use TYPO3\CMS\Backend\Utility\BackendUtility;
use TYPO3\CMS\Frontend\Utility\EidUtility;
/*
* Initialise tsfe
*/
function initTSFE($id = 1, $typeNum = 0) {
EidUtility::initTCA();
if (!is_object($GLOBALS['TT'])) {
$GLOBALS['TT'] = new \TYPO3\CMS\Core\TimeTracker\NullTimeTracker;
$GLOBALS['TT']->start();
}
$GLOBALS['TSFE'] = GeneralUtility::makeInstance('TYPO3\\CMS\\Frontend\\Controller\\TypoScriptFrontendController', $GLOBALS['TYPO3_CONF_VARS'], $id, $typeNum);
$GLOBALS['TSFE']->connectToDB();
$GLOBALS['TSFE']->initFEuser();
$GLOBALS['TSFE']->determineId();
$GLOBALS['TSFE']->initTemplate();
$GLOBALS['TSFE']->getConfigArray();
if (ExtensionManagementUtility::isLoaded('realurl')) {
$rootline = BackendUtility::BEgetRootLine($id);
$host = BackendUtility::firstDomainRecord($rootline);
$_SERVER['HTTP_HOST'] = $host;
}
}
2. Generate typolink
Below is the example function that generates typolink.
private function createLink($detailUid) {
$this->initTSFE();
/** @var \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer $cObj*/
$cObj = GeneralUtility::makeInstance('TYPO3\\CMS\\Frontend\\ContentObject\\ContentObjectRenderer');
$my_url = $cObj->typoLink_URL(array(
'parameter' => intval($detailUid),
'additionalParams' => '&kvt='.$my_additionalParameters,
'additionalParams.insertData' => 1,
'returnLast' => 'url',
'useCacheHash' => 1
));
//returns the url
return $my_url;
}
That's it.