メッセージが永続化されるまで、メッセージ メタデータは存在しません。そのため、メッセージをデータベースに保存した後、既読ステータスを設定する必要があります。
これを行う最も簡単な方法は、EventSubscriber を登録することです。作業例コード:
<?php
namespace Acme\DemoBundle\EventListener;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use FOS\MessageBundle\Event\MessageEvent;
use FOS\MessageBundle\Event\FOSMessageEvents as Event;
use FOS\MessageBundle\ModelManager\MessageManagerInterface;
class MessageSendSubscriber implements EventSubscriberInterface
{
private $messageManager;
public function __construct(MessageManagerInterface $messageManager)
{
$this->messageManager = $messageManager;
}
public static function getSubscribedEvents()
{
return array(
Event::POST_SEND => 'markAsReadBySender'
);
}
public function markAsReadBySender(MessageEvent $event)
{
$message = $event->getMessage();
$sender = $message->getSender();
$this->messageManager->markAsReadByParticipant($message, $sender);
$this->messageManager->saveMessage($message);
}
}
services.yml で:
message_send_listener:
class: Acme\DemoBundle\EventListener\MessageSendSubscriber
arguments: [@fos_message.message_manager]
tags:
- { name: kernel.event_subscriber }
ここで、サブスクライブできるイベントを確認できます:
https://github.com/FriendsOfSymfony/FOSMessageBundle/blob/master/Event/FOSMessageEvents.php