FOSMessageBundle в Symfony2

Как мне установить, когда я создаю поток, что сообщение прочитано создателем потока?

У меня есть эта часть кода

$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. Итак, мне нужно установить, чтобы автор считывался при отправке сообщения.

Кто-нибудь?:)

1 ответ

Решение

Метаданные сообщения не существуют, пока сообщение не будет сохранено. Вот почему вы должны установить статус чтения после сохранения сообщения в базе данных.

Самый простой способ сделать это - зарегистрировать 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

Другие вопросы по тегам