将FlashMessage发送到不同的BackendUser

时间:2017-05-22 14:06:14

标签: typo3 typo3-7.6.x

我知道如何在后端创建Flash消息,并希望使用此功能来创建内部sys_notes的附加功能。我可以使用以下内容为当前用户创建flash消息:

$flashMessage = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Messaging\FlashMessage::class, 'This is some info flash message', '', \TYPO3\CMS\Core\Messaging\FlashMessage::INFO, true);
/** @var $flashMessageService \TYPO3\CMS\Core\Messaging\FlashMessageService */
$flashMessageService = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Messaging\FlashMessageService::class);
/** @var $defaultFlashMessageQueue \TYPO3\CMS\Core\Messaging\FlashMessageQueue */
$defaultFlashMessageQueue = $flashMessageService->getMessageQueueByIdentifier();
$defaultFlashMessageQueue->enqueue($flashMessage);

现在的问题是:我是否可以为当前BackendUser的FlashMessage队列创建一条Flash消息?

1 个答案:

答案 0 :(得分:3)

据我所知:不,你不能。 FlashMessages存储在您的用户会话中,这意味着为了将FlashMessage存储在另一个用户的会话中,必须操纵该会话。没有任何API可以“在用户BAZ的会话中设置XYZ” - 但也许您可以手动更改会话记录以排队FlashMessage(简单地落后于正常的调度方式)。

但是,我不确定我会这样做。以这种方式操纵会话可能会有风险。通常我建议使用 HashMap<String, String> headers = new HashMap<>(); headers.put("Authorization", code); headers.put("Content-Type", "application/x-www-form-urlencoded"); headers.put("Accept", "application/json"); final HttpAuthorizer authorizer = new HttpAuthorizer("My URL"); authorizer.setHeaders(headers); PusherOptions options = new PusherOptions() .setEncrypted(true) .setCluster("ap2") .setAuthorizer(authorizer); final Pusher pusher = new Pusher("KEY", options); pusher.connect(new ConnectionEventListener() { @Override public void onConnectionStateChange(ConnectionStateChange change) { if (change.getCurrentState() == ConnectionState.CONNECTED) { subscribeToChannel(); } } @Override public void onError(String s, String s1, Exception e) {} }); ,但您已经提到过您正在尝试扩展这个确切的组件。如果你最终决定它风险太大,也许可以考虑实现自己的排队,将FlashMessages假脱机放在一个单独的数据库表中,并将每条消息与用户或用户组相关联。