使用Zend的FlashMessenger - 如何向其他用户发送消息?

时间:2009-09-17 16:00:45

标签: php zend-framework

我正在尝试使用FlashMessenger来通知其他用户事件。有谁知道这是否可行?

这样的东西
$flashMessenger->addMessage( array('status'=> '', 'message'=> 'Hello!'), $user);

2 个答案:

答案 0 :(得分:1)

引用manual page of the FlashMessenger

  

FlashMessenger帮助程序允许您   传递用户可能传递的消息   需要看下一个请求。至   实现这一点, FlashMessenger使用   要存储Zend_Session_Namespace   用于将来或下一个请求的消息   检索

因此,消息存储在会话中 - 并且会话附加到/对应于用户;实际上是当前的用户。

会话不是为了存储不同用户之间共享的数据 - 所以我想说这个组件不能用于通知其他用户事件;至少不是本地的。


可能的解决方案是:

  • 当您检测到有必须转发给其他用户的消息时,将其存储在数据库中(如果目标用户是连接用户,则某个表的外键指向目标用户;某些表存储消息,如果任何人都可以看到的话
  • 在每个页面上,您检查该数据库表是否是必须显示的消息
  • 如果是的话,你把它放在FlashMessenger中,它会在当前用户的下一页加载时显示它。

有点棘手,并不像你希望的那么容易,我承认......

另一个想法,而不是使用数据库,将使用一些缓存引擎(如APC,memcached,...请参阅Zend_Cache,以避免命中数据库。

玩得开心!

答案 1 :(得分:0)

其他选项是实现您自己的会话处理并将其存储在DB(以及用户名)中。然后,您可以访问它并以任何方式更改它。当我们需要通过托管环境会话设置的一些疯狂限制(一天有限会话生命周期)时,我们已经实现了这一点。它工作得非常好,并且在默认实现方面提供了更多的可能性(例如,如果某些特定用户登录,则注销所有用户 - 例如superadmin或注册用户,如果他的密码在管理部分中更改,等等)。

但我想这对你的目的来说有点矫枉过正。而Pascal的方式就足够了。