Flash messages in Extbase

In Extbase, the standard way of issuing flash messages is to add them in the controller. Code from the "examples" extension:

EXT:examples/Classes/Controller/ModuleController.php
$this->addFlashMessage('This is a simple success message');
Copied!

A more elaborate example:

EXT:examples/Classes/Controller/ModuleController.php
// use TYPO3\CMS\Core\Type\ContextualFeedbackSeverity;

$this->addFlashMessage(
   'This message is forced to be NOT stored in the session by setting the fourth argument to FALSE.',
   'Success',
   ContextualFeedbackSeverity::OK,
   false
);
Copied!

The messages are then displayed by Fluid with the FlashMessages ViewHelper <f:flashMessages>:

<div id="typo3-docbody">
   <div id="typo3-inner-docbody">
      <f:flashMessages />
      <f:render section="main" />
   </div>
</div>
Copied!

Where to display the flash messages in an Extbase-based backend module is as simple as moving the ViewHelper around.

By default, all messages are put into the scope of the current plugin namespace with a prefix extbase.flashmessages.. So if your plugin namespace is computed as tx_myvendor_myplugin, the flash message queue identifier will be extbase.flashmessages.tx_myvendor_myplugin.

Using explicit flash message queues in Extbase

It is possible to add a message to a different flash message queue. Use cases could be a detailed display of different flash message queues in different places of the page or displaying a flash message when you forward to a different controller or even a different extension.

If you need distinct queues, you can use a custom identifier to fetch and operate on that queue:

$customQueue = $this->getFlashMessageQueue('tx_myvendor_customqueue');
// Instead of using $this->addFlashMessage() you will instead directly
// access the custom queue:
$flashMessage = GeneralUtility::makeInstance(
        FlashMessage::class,
        'My flash message in a custom queue',
        'My flash message title of a custom queue',
        ContextualFeedbackSeverity::OK,
        $storeInSession = true,
);
$customQueue->enqueue($flashMessage);
Copied!

Fluid flash messages ViewHelper with explicit queue identifier

When you used an explicit flash message queue during enqueueing the message, it will only be displayed on the page if you use the same identifier in the FlashMessages ViewHelper <f:flashMessages>.

<f:flashMessages queueIdentifier="tx_myvendor_customqueue" />
Copied!