Symfony2中的FOSMessageBundle(FOSMessageBundle in Symfony2)

编程入门 行业动态 更新时间:2024-10-09 15:25:38
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);

但是当我在最后一行发送消息时,在数据库中,当发送方应设置为1时,is_read的值设置为0.因此,我需要设置作者在发送消息时被读取。

任何人? :)

How do i set, when i create a thread, that the message is read by the creator of the thread?

I have this portion of code

$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);

But when i send the message in the last line, in the database the value of is_read is set to 0, when the sender should be set to 1. So, i need to set the author to is read when he send the message.

Anyone? :)

最满意答案

在消息持久化之前,消息元数据不存在。 这就是为什么将消息保存到数据库必须设置读取状态的原因。

最简单的方法是注册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

Message metadata doesn't exist until message is persisted. That's why you have to set read status after saving message to database.

The easiest way to do this is registering EventSubscriber. Working example code:

<?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); } }

In services.yml:

message_send_listener: class: Acme\DemoBundle\EventListener\MessageSendSubscriber arguments: [@fos_message.message_manager] tags: - { name: kernel.event_subscriber }

Here you can check what events you can subscribe to: https://github.com/FriendsOfSymfony/FOSMessageBundle/blob/master/Event/FOSMessageEvents.php

更多推荐

本文发布于:2023-07-06 07:45:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1047471.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:FOSMessageBundle

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!