簡體   English   中英

Symfony2中的FOSMessageBundle

[英]FOSMessageBundle in 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。因此,我需要將作者設置為在他發送消息時被讀取。

任何人? :)

消息元數據只有在持久存在后才存在。 這就是為什么將消息保存到數據庫之后必須設置讀取狀態。

最簡單的方法是注冊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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM