‪TYPO3CMS  ‪main
FlashMessagesViewHelper.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
26 use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
27 use TYPO3Fluid\Fluid\Core\Variables\ScopedVariableProvider;
28 use TYPO3Fluid\Fluid\Core\Variables\StandardVariableProvider;
29 use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
30 use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
31 
106 final class ‪FlashMessagesViewHelper extends AbstractViewHelper
107 {
108  use CompileWithRenderStatic;
109 
115  protected ‪$escapeOutput = false;
116 
117  public function ‪initializeArguments(): void
118  {
119  $this->registerArgument('queueIdentifier', 'string', 'Flash-message queue to use');
120  $this->registerArgument('as', 'string', 'The name of the current flashMessage variable for rendering inside');
121  }
122 
134  public static function ‪renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext)
135  {
136  $as = $arguments['as'];
137  $queueIdentifier = $arguments['queueIdentifier'];
138 
139  if ($queueIdentifier === null) {
141  $request = $renderingContext->getRequest();
142  if (!$request instanceof ‪RequestInterface) {
143  // Throw if not an extbase request
144  throw new \RuntimeException(
145  'ViewHelper f:flashMessages needs an extbase Request object to resolve the Queue identifier magically.'
146  . ' When not in extbase context, set attribute "queueIdentifier".',
147  1639821269
148  );
149  }
150  $extensionService = GeneralUtility::makeInstance(ExtensionService::class);
151  $pluginNamespace = $extensionService->getPluginNamespace($request->getControllerExtensionName(), $request->getPluginName());
152  $queueIdentifier = 'extbase.flashmessages.' . $pluginNamespace;
153  }
154 
155  $flashMessageQueue = GeneralUtility::makeInstance(FlashMessageService::class)->getMessageQueueByIdentifier($queueIdentifier);
156  $flashMessages = $flashMessageQueue->getAllMessagesAndFlush();
157  if (count($flashMessages) === 0) {
158  return '';
159  }
160 
161  if ($as === null) {
162  return GeneralUtility::makeInstance(FlashMessageRendererResolver::class)->resolve()->render($flashMessages);
163  }
164 
165  $variableProvider = new ScopedVariableProvider($renderingContext->getVariableProvider(), new StandardVariableProvider([$as => $flashMessages]));
166  $renderingContext->setVariableProvider($variableProvider);
167 
168  $content = $renderChildrenClosure();
169 
170  $renderingContext->setVariableProvider($variableProvider->getGlobalVariableProvider());
171 
172  return $content;
173  }
174 }
‪TYPO3\CMS\Fluid\ViewHelpers\FlashMessagesViewHelper\initializeArguments
‪initializeArguments()
Definition: FlashMessagesViewHelper.php:115
‪TYPO3\CMS\Fluid\ViewHelpers\FlashMessagesViewHelper\$escapeOutput
‪bool $escapeOutput
Definition: FlashMessagesViewHelper.php:113
‪TYPO3\CMS\Core\Messaging\FlashMessageRendererResolver
Definition: FlashMessageRendererResolver.php:33
‪TYPO3\CMS\Fluid\ViewHelpers
‪TYPO3\CMS\Extbase\Mvc\RequestInterface
Definition: RequestInterface.php:24
‪TYPO3\CMS\Fluid\ViewHelpers\FlashMessagesViewHelper
Definition: FlashMessagesViewHelper.php:107
‪TYPO3\CMS\Extbase\Service\ExtensionService
Definition: ExtensionService.php:34
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Fluid\Core\Rendering\RenderingContext
Definition: RenderingContext.php:35
‪TYPO3\CMS\Core\Messaging\FlashMessageService
Definition: FlashMessageService.php:27
‪TYPO3\CMS\Fluid\ViewHelpers\FlashMessagesViewHelper\renderStatic
‪static mixed renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext)
Definition: FlashMessagesViewHelper.php:132