Nic*_*ico 4 php symfony message-bundle
在创建线程时,如何设置线程的创建者读取消息?
我有这部分代码
$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);
Run Code Online (Sandbox Code Playgroud)
但是当我在最后一行发送消息时,在数据库中,当发送方应设置为1时,is_read的值设置为0.因此,我需要将发送者设置为在发送消息时读取.
任何人?:)
小智 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);
}
}
Run Code Online (Sandbox Code Playgroud)
在services.yml中:
message_send_listener:
class: Acme\DemoBundle\EventListener\MessageSendSubscriber
arguments: [@fos_message.message_manager]
tags:
- { name: kernel.event_subscriber }
Run Code Online (Sandbox Code Playgroud)
在这里,您可以查看您可以订阅的活动:https: //github.com/FriendsOfSymfony/FOSMessageBundle/blob/master/Event/FOSMessageEvents.php