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:
$this->addFlashMessage('This is a simple success message');
Warning
You cannot call this function in the constructor of a controller or in an initialize action as it needs some internal data structures to be initialized.
A more elaborate example:
// 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
);
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>
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.
. So
if your plugin namespace is computed as tx_
, the
flash message queue identifier will be
extbase.
.
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);
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" />