我知道如何在后端创建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消息?
答案 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假脱机放在一个单独的数据库表中,并将每条消息与用户或用户组相关联。