4

スレッドを作成するときに、スレッドの作成者がメッセージを読むように設定するにはどうすればよいですか?

私はコードのこの部分を持っています

$composer = $this->get('fos_message.composer');
    $message  = $composer->newThread()
        ->setSender($this->getUser())
        ->setSubject('myThread')
        ->setBody($request->get('createThread')['my_thread']);

    $sender = $this->get('fos_message.sender');
    $sender->send($message);

しかし、最後の行でメッセージを送信すると、データベースで is_read の値が 0 に設定されますが、送信者を 1 に設定する必要があります。

誰?:)

4

1 に答える 1

6

メッセージが永続化されるまで、メッセージ メタデータは存在しません。そのため、メッセージをデータベースに保存した後、既読ステータスを設定する必要があります。

これを行う最も簡単な方法は、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

于 2013-06-25T09:21:19.727 に答える