Extbase Command Controller

Nachdem ich in einem vorherigen Artikel beschrieben habe, wie in einem TYPO3 Scheduler Task eine Extbase Action aufgerufen werden kann, hat sich inzwischen ergeben, dass diese Möglichkeit ab Extbase 1.4 nicht mehr funktioniert. Stattdessen können nun sogenannte Command Controller verwendet werden, welche von FLOW3 backported wurde.

Prinzipiell kann ein Command Controller ähnlich verwendet werden wie selbst erstellte Extbase Controller, daher kann auf Repositories zugegriffen werden, etc. Die im Command Controller erstellten Commands, können dann entweder über den Scheduler, oder über die Command Line aufgerufen werden.

Zu Beginn muss ein eigener Command Controller angelegt werden. Im Controller können sich dann mehrere Commands befinden. Das funktioniert folgendermaßen:

Soweit sogut. Um die Commands nun aufzurufen, reicht es nicht wie in FLOW3 einfach den Cache zu leeren, da Extbase den neuen Command Controller leider nicht automatisch erkennt. Stattdessen muss die Datei ext_localconf.php um folgende Zeilen erweitert werden:

Der Aufruf eines Command Controllers in der Command Line funktioniert dann ähnlich wie in FLOW3. Mithilfe des folgenden Befehls, werden alle registrierten Command Controller und Commands aufgelistet:

Der Aufruf eines Commands selbst funktioniert so:

9 Kommentare zu “Extbase Command Controller

  1. Nov
    16

    mostwanted

    danke fuer deinen artikel.

    du schreibst, dass man in command controller z.b. auch auf repositories zugreifen kann. der aufruf von $myRository->findByUid($uid) funktioniert auch ohne weitere konfiguration out of the box. fuer $myRository->findAll() muessen anscheinend noch bestimmte konfigurationen-einstellungen vorgenommen werden…

    leider hab ich nicht herausfinden koennen, wie man hier vorgehen muss.

    hast du damit erfahrung?

    • Nov
      16

      Clem

      findAll() sollte eigentlich auch problemlos funktionieren. Wie hast du denn dein Repository initialisiert?

        • Nov
          22

          Clem

          Dann sollte das eigentlich funktionieren. Was passiert denn überhaupt, wenn du findAll() aufrufst?

    • Mrz
      14

      Klaus

      Ich habe dasselbe Verhalten. “findByUid($uid)” funktioniert. Aber “findAll()” bzw. “removeAll()” leider nicht. Woran könnte das liegen?

    • Aug
      20

      Philipp

      Ich brauchte noch folgendes um die Repositories zum laufen zu bekommen:


      $configurationManager = $this->objectManager->get('TYPO3\CMS\Extbase\Configuration\ConfigurationManager');
      $extbaseFrameworkConfiguration = $configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK, 'EXTENSIONKEY', 'PLUGIN');
      $settings = $configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_SETTINGS, 'EXTENSIONKEY', 'PLUGIN');
      $configurationManager->setConfiguration($extbaseFrameworkConfiguration);

  2. Okt
    06

    Jok

    missing storagePid?
    – findByUid() always works without storagePid
    – findAll() … needs storagePid set by TS-Setup module.tx_myext.persistence.storagePid = x
    – TS module.tx_myext needs to be loaded in root template of your installation to get work for commandController

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *