2016-03-05 152 views
2

我想在Yii2中實現簡單的通知系統。 我有一個ListView中填充的記錄列表。 我想讓用戶爲這個記錄投票。每個記錄只有一次。 此外,每個記錄的作者都必須得到通知(如新的電子郵件一樣)關於誰投票支持他的記錄。 在Yii2中實現這個最簡單的方法是什麼? 感謝您的建議!Yii2通知系統執行

+0

最簡單的方法是使用事件。 http://www.yiiframework.com/doc-2.0/guide-concept-events.html – SiZE

+0

感謝您的鏈接。據我所知,通過事件我可以獲取和處理來自用戶的數據(我也可以使用控制器/操作),但是如何通知用戶他獲得了新消息(數據庫中有新記錄)?有沒有可以觸發服務器推送的事件?或者我可以找到關於它如何工作的簡單解釋或例子? – Dmytro

+0

你知道如何使用JS事件,比如onclick等嗎?這是一樣的。您註冊事件,註冊事件處理程序,觸發該事件並在處理程序中處理您自己的邏輯。這可能就像發送電子郵件,更新數據庫,任何你想要的東西。 – SiZE

回答

1

使用php只有你不能這樣做,你需要有一些點js。

解決方案從用戶B方面來看,如果發生任何事件(事件),您在一段時間後(使用ajax)不斷詢問服務器。如果它確實返回結果與該Ajax並更新頁面。 但是,這不是一個很好的做法。

如果你真的想要一個實時更新,您可能需要使用socket.io。然後再次使用PHP套接字是一個壞主意。

所以來這裏的解決方案二:yii2 + redis + nodejs + socket

Redis的會做yii2和之間的NodeJS的通信。這個想法是,如果發生什麼事件(事件或更新),yii2將發佈 a event與關聯data到redis channel和正在偵聽該通道的nodejs將捕獲該事件並使用套接字發送數據(或更新)到客戶端。

Here is a real time chat application tutorial using yii2+redis+nodejs+socket.

+0

謝謝你的鏈接。這非常有用。但是,我可以通過哪種方式獲得新連接客戶端的ID?過濾郵件的最佳做法是什麼(例如,如果我需要向特定用戶發送郵件)?我應該爲它創建一個新頻道嗎?或者,我應該在套接字中創建過濾器(notification.js,如上所述)?我可以發佈到一個頻道的發件人和目標用戶的ID,但如何獲得用戶($ thismodel-> ID)在套接字js代碼中以檢查當前用戶是否是真正的目標? – Dmytro

+0

你可以在這個''io.on('connection',function(socket){'''socket.id'')裏面獲得套接字ID,它會給你你應該以某種方式存儲它的ID,然後當發送消息給用戶而不是'socket.emit'使用**'io.sockets.to(socketId).emit' **其中** socketId **是特定用戶的套接字ID – leninhasda