TYPO3: FlashMessages

Sammlung zu FlashMessages in Extbase.

FlashMessages erstellen

Anlegen einer FlashMessage im Controller:

$this->addFlashMessage(
  'The message text.',
  'The title',
  \TYPO3\CMS\Core\Messaging\AbstractMessage::OK
);

oder

$this->controllerContext->getFlashMessageQueue()->enqueue(
  $this->objectManager->get(
    \TYPO3\CMS\Core\Messaging\FlashMessage::class,
    'The message text.',
    'The title',
    \TYPO3\CMS\Core\Messaging\AbstractMessage::OK
  )
);

Die zweite Funktion macht das gleiche wie die erste, die erste Funktion ist lediglich eine vereinfachte Variante der zweiten Funktion.

FlashMessages anzeigen

Auslesen von Meldungen im Controller:

$this->controllerContext->getFlashMessageQueue()->getAllMessages()

oder

$this->controllerContext->getFlashMessageQueue()->getAllMessagesAndFlush()

Ausgeben von Meldungen im Fluid Template:

<f:flashMessages renderMode="div" />

Anpassen der CSS Klassen

Kann sinnvoll, wenn man beispielsweise Bootstrap als Framework nutzt.

Geht vermutlich nur per XCLASS von \TYPO3\CMS\Core\Messaging\FlashMessage, damit wirklich ALLE Meldungen die eigenen CSS Klassen enthalten. Für die Änderung der CSS Klassen von Meldungen, die von einer eigenen Erweiterung erzeugt werden, gibt es folgende Möglichkeit:

EXT:my_ext/Classes/Messaging/FlashMessage.php

namespace TYPO3\MyExt\Messaging;
class FlashMessage extends \TYPO3\CMS\Core\Messaging\FlashMessage {
  protected $classes = array(
    self::NOTICE => 'notice alert alert-info',
    self::INFO => 'info alert alert-info',
    self::OK => 'ok alert alert-success',
    self::WARNING => 'warning alert alert-warning',
    self::ERROR => 'error alert alert-danger'
  );
}

Entsprechend ändert sich dann natürlich der Aufruf:

View

$this->controllerContext->getFlashMessageQueue()->enqueue(
  $this->objectManager->get(
    \Vendor\MyExt\Messaging\FlashMessage::class,
    'The message text.',
    'The title',
    \TYPO3\MyExt\Messaging\FlashMessage::OK
  )
);

FlashMessages in initializeAction()

Ist nicht möglich, da $this->contextController noch nicht bereitsteht.

Alternative: Funktion emitBeforeCallActionMethodSignal() nutzen, diese Funktion wird ebenfalls vor der Action aufgerufen:

/**
 * Called before all actions
 *
 * @param array $preparedArguments
 */
protected function emitBeforeCallActionMethodSignal(array $preparedArguments) {
    parent::emitBeforeCallActionMethodSignal($preparedArguments);
 
    $action = $this->request->getControllerActionName();
    if(in_array($action, array('list', 'new'))) {
        $this->addFlashMessage('Text', 'Title', \TYPO3\CMS\Core\Messaging\AbstractMessage::OK);
    }
}

FlashMessages im Backend (TYPO3 ab Version 6.1)

Nutzbar z.B. in einem Hook, der beim Speichern eines Datensatzes greift.

use TYPO3\CMS\Core\Messaging\FlashMessage;
use TYPO3\CMS\Core\Messaging\FlashMessageService;
use TYPO3\CMS\Core\Utility\GeneralUtility;
 
/** @var FlashMessage $flashMessage */
$flashMessage = GeneralUtility::makeInstance(
    FlashMessage::class,
    'message',
    'title',
    FlashMessage::INFO,
    true // store in session
);
$flashMessageService = GeneralUtility::makeInstance(FlashMessageService::class);
$defaultFlashMessageQueue = $flashMessageService->getMessageQueueByIdentifier();
$defaultFlashMessageQueue->enqueue($flashMessage);

4 Kommentare zu “TYPO3: FlashMessages”

  1. Ah und für den zweitletzten Abschnitt: TYPO3 nutzt nun standardmässig die Bootstrap Klassen für die FlashMessages. Man kann die render-Funktion von \TYPO3\CMS\Core\Messaging\FlashMessage überschreiben wenn man das HTML anpassen will.

  2. Danke für die Infos. Weist du auch was man für FlashMessages in den initialize[Meineaction]Actions verwenden kann?

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.