Um die Plugin-Einstellungen einer Extbase-Extension auch im CommandController (Backend- oder CLI-Kontext) verfügbar zu machen, sollten folgendes beachtet werden:
1. die plugin Settings in module übernehmen:
module.tx_foo < plugin.tx_foo
2. In ext_localconf.php die constants.txt und setup.txt mittels ExtensionManagementUtility::addTypoScript einbinden:
if(TYPO3_MODE === 'BE') { // Constants \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScript($_EXTKEY,'constants',' <INCLUDE_TYPOSCRIPT: source="FILE:EXT:'. $_EXTKEY .'/Configuration/TypoScript/constants.txt">'); // Setup \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScript($_EXTKEY,'setup',' <INCLUDE_TYPOSCRIPT: source="FILE:EXT:'. $_EXTKEY .'/Configuration/TypoScript/setup.txt">'); // CommandController registrieren $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['extbase']['commandControllers'][] = 'Vendor\Foo\Command\FooCommandController'; } |
damit wird sichergestellt, dass das Setup unter allen Umständen geladen wird. In der Regel bindet man das Extension Setup ja in einem Frontend TS Template ein; somit wird es im Backend / CLI Kontext nicht geladen (zumindest dann nicht, wenn man es nicht im Root Template eingebunden hat, sondern z.B. in einem Extension-Template auf einer Unterseite).
3) im Controller die Settings über den ConfigurationManager reinholen:
<?php namespace Vendor\Foo\Command; class FooCommandController extends \TYPO3\CMS\Extbase\Mvc\Controller\CommandController { /** * @var \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface * @inject */ protected $configurationManager; /** * @var array */ protected $settings = array(); /** * Settings aus dem CibfigurationManager ziehen und zuweisen */ public function initialize() { $settings = $this->configurationManager->getConfiguration( \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_SETTINGS ); $this->settings = $settings; } /** * die eigentliche Command Methode -> initialize() aufrufen */ public function fooCommand() { $this->initialize(); // $foo = $this->settings['bar']; // Command Logik ... } } |
Danke für den Artikel, gut beschrieben! Man kann auch die Funktion „initializeAction“ nutzen und sich damit den Aufruf „$this->initialize()“ sparen. So mach ich es immer…
Halleluja. Schönes, kleines Tutorial! Besonders gefällt mir das Laden der constant.txt und setup.txt zentral in der Extension, anstatt es an 2-3 anderen Stellen zu machen.. das ist wirklich elegant gelöst. Das habe ich so bisher noch nirgendwo gesehen. Danke!