質問編集履歴

4

2020/09/10 06:25

投稿

T.Takeda
T.Takeda

スコア29

test CHANGED
@@ -1 +1 @@
1
- ログイン済みの特定複数ユーザーにイベントを通知する方法が知りたいです
1
+ ログイン済みの特定複数ユーザーにイベントを通知する方法が知りたい
test CHANGED
File without changes

3

2020/09/10 06:25

投稿

T.Takeda
T.Takeda

スコア29

test CHANGED
File without changes
test CHANGED
@@ -180,4 +180,4 @@
180
180
 
181
181
 
182
182
 
183
- よろしくお願いします。
183
+ なにか手掛かりになる情報でも良いのでどうぞよろしくお願いします。

2

タグ修正

2020/09/10 06:24

投稿

T.Takeda
T.Takeda

スコア29

test CHANGED
File without changes
test CHANGED
File without changes

1

質問を補足

2020/09/10 01:46

投稿

T.Takeda
T.Takeda

スコア29

test CHANGED
File without changes
test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  #質問したいこと
22
22
 
23
- ログイン済みの特定複数ユーザーにメッセージが投稿されたというイベントを通知するためにはどのような方法が良いかアドバイスいただけませんでしょうか。
23
+ ログイン済みの特定複数ユーザーにメッセージが投稿されたというイベントを通知するためにはどのような方法が良いかアドバイスいただけませんでしょうか。・・・追記箇所をご参照願います!
24
24
 
25
25
 
26
26
 
@@ -49,3 +49,135 @@
49
49
 
50
50
 
51
51
  どうぞよろしくお願いします。
52
+
53
+
54
+
55
+ #追記
56
+
57
+ プレゼンスチャンネルを用いて特定の複数ログイン済みユーザーのみが通知を受け取ることができました。
58
+
59
+ ただ一点わからない所があり、質問させていただきたいです。
60
+
61
+
62
+
63
+ #新たな質問
64
+
65
+
66
+
67
+ メッセージの投稿イベントが発生した際、vueコンポーネント側の`window.Echo`でもチャンネル名を指定しておく必要があると理解しているのですが、通知を受け取るvueコンポーネント側はどのプロジェクトに対してメッセージが投稿されるのかがわからないので、チャンネル名がうまく指定できずにおります。
68
+
69
+ そもそも期待している機能はプレゼンスチャンネルでは実現できないのでしょうか。
70
+
71
+ ちなみに、特定の複数ログイン済みユーザーのみが通知を受け取るという動作確認を行った際には以下`NotificationComponent.vue(vueコンポーネント)`ファイルの`this.projectId`を1などの値にして確認を行いました。
72
+
73
+
74
+
75
+ app/Events/UpdateNotice.php(イベント)
76
+
77
+ ```php
78
+
79
+ public function broadcastOn()
80
+
81
+ {
82
+
83
+ return new PresenceChannel('notification-channel.'.$this->project->id);
84
+
85
+ }
86
+
87
+ ```
88
+
89
+
90
+
91
+ routes/channels.php
92
+
93
+ ```php
94
+
95
+ Broadcast::channel('notification-channel.{project_id}', function ($user, $project_id) {
96
+
97
+ $project = Project::findOrFail($project_id); //メッセージが投稿されたプロジェクトの情報
98
+
99
+ $organizer = $project->organizer_id; //主催者のid情報
100
+
101
+ $entryUsers = $project->users()->get(); //エントリーしているユーザー達の情報
102
+
103
+
104
+
105
+ if ((int) $user->id === (int) $organizer) {
106
+
107
+ return ['id' => $user->id, 'name' => $user->name];
108
+
109
+ } else {
110
+
111
+ foreach ($entryUsers as $entryUser) {
112
+
113
+ if ((int) $user->id === (int) $entryUser->id) {
114
+
115
+ return ['id' => $entryUser->id, 'name' => $entryUser->name];
116
+
117
+ }
118
+
119
+ };
120
+
121
+ };
122
+
123
+ });
124
+
125
+ ```
126
+
127
+
128
+
129
+ resource/js/components/NotificationComponent.vue(vueコンポーネント)
130
+
131
+ ```vue
132
+
133
+ <template>
134
+
135
+ //省略
136
+
137
+ </template>
138
+
139
+ <script>
140
+
141
+ export default {
142
+
143
+ data() {
144
+
145
+ return {
146
+
147
+ projectId : '', //これを書かないとundefinedエラーが出てしまうのでとりあえず書きましたが本来の意味を成していません
148
+
149
+ };
150
+
151
+ },
152
+
153
+ mounted() {
154
+
155
+ window.Echo.join("notification-channel." + this.projectId) //【質問点】そもそもどのプロジェクトに投稿があるのか予測できないのでthis.projectIdを事前に指定しておくことができない?
156
+
157
+ .listen("UpdateNotice", response =>
158
+
159
+ {
160
+
161
+ //ベルマークのスタイルを変更する処理
162
+
163
+ });
164
+
165
+
166
+
167
+ this.ToggleNotificationIcon();
168
+
169
+ },
170
+
171
+ };
172
+
173
+ </script>
174
+
175
+ ```
176
+
177
+
178
+
179
+ なお、公式ドキュメントでも`Echo.join('chat.' + roomId)`という形で例が記載されているのですが、`roomId`がどのように定義しているのか確認できません。
180
+
181
+
182
+
183
+ よろしくお願いします。