Mithilfe der Klassen SiteFinder und PageRouter ist es möglich, im CLI-Context (einfache) Frontend Links zu erzeugen. Diese Art der Implementierung ist recht schlank und hat den Vorteil, dass im Gegensatz zu anderen Varianten nicht das komplette TSFE erzeugt werden muss.

SiteFinder + PageRouter

/**
 * getUnsubscribeUrl
 *
 * @param int $pageId
 * @param Recipient $recipient
 * @return string
 */
private function getUnsubscribeUrl(int $pageId, Recipient $recipient) {

	/** @var SiteFinder $siteFinder */
	$siteFinder = GeneralUtility::makeInstance(SiteFinder::class);

	/** @var Site $site */
	$site = $siteFinder->getSiteByPageId($pageId);

	$parameters = [
		'tx_newsletter_subscription' => [
			'action' => 'edit',
			'controller' => 'Subscription',
			'r' => $recipient->getUid(),
			'rH' => HashUtility::calculateHash($recipient->getUid())
		]
	];

	return (string) $site->getRouter()->generateUri($pageId, $parameters);
}

In diesem Zusammenhang auch hilfreich eine ebenfalls (sehr schlanke) Methode, um mithilfe der Klassen TemplateService und PageRepository anhand einer gegebenen PageId die TypoScript Konfiguration im CLI Context verfügbar zu machen.

TemplateService + PageRepository

/**
 * loadTypoScript
 *
 * @param int $pageId
 * @return void
 */
private function loadTypoScript(int $pageId) {
	/** @var TemplateService $template */
	$template = GeneralUtility::makeInstance(TemplateService::class);
	$template->tt_track = 0;
	$template->init();
	$sys_page = GeneralUtility::makeInstance(PageRepository::class);
	$rootline = $sys_page->getRootLine($pageId);
	$template->runThroughTemplates($rootline, 0);
	$template->generateConfig();
	// Now setup and constants are available like this
	$this->setup = $template->setup['plugin.']['tx_newsletter_subscription.']['settings.'];
	$this->constants = $template->setup_constants['plugin.']['tx_newsletter_subscription.']['settings.'];
}




Kommentare