2016-10-22 8 views
1

Typo3 7.xで、別の内線番号にリダイレクトした後にflashmessageを表示する必要があります。どういうわけか、メッセージが表示されません。別の拡張機能/プラグインからのフラッシュメッセージを表示するにはどうすればよいですか?

// in powermail_extended: 

$this->addFlashMessage('Some message', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::NOTICE); 

$uri = $this->uriBuilder->uriFor('form', [], 'Form', 'powermail', 'pi1'); 
$this->redirectToURI($uri); 

は、フラッシュメッセージにのみ表示されているのと同じフロントエンドプラグインはリダイレクト後に表示されますか?もしそうなら、どうすれば "海外"のフラッシュメッセージも表示できますか?

+0

私は解決策を見つけたと思って、後でそれを投稿します... – giraff

+0

おそらくパラメータを取得するか、リダイレクト後に同じ変数から何らかの方法でそれらを検出する必要があります。 –

+0

XSSの理由でGETパラメータでメッセージを送信するのが好きではありません... – giraff

答えて

3

はい、フラッシュメッセージはフロントエンドプラグインによって異なるキューにあります。リダイレクト後のコントローラでは、以下の行を追加します。

protected function emitBeforeCallActionMethodSignal(array $preparedArguments) { 
    parent::emitBeforeCallActionMethodSignal($preparedArguments); 
    $this->addMessagesToDefaultQueue('extbase.flashmessages.tx_powermailextended_pi1' /* depending on your frontend plugin name */); 
} 

protected function addMessagesToDefaultQueue($queueId) { 
    $queue = $this->controllerContext->getFlashMessageQueue($queueId); 
    $msg = $queue->getAllMessagesAndFlush(); 
    if ($msg) { 
     $defaultQueue = $this->controllerContext->getFlashMessageQueue(); 
     foreach ($msg as $m) { 
      $defaultQueue->enqueue($m); 
     } 
    } 
} 

これは、リダイレクトする前に、プラグインからのメッセージを削除し、それを「正しい」キューを追加します。

関連する問題