【发布时间】:2020-06-19 23:30:39
【问题描述】:
我正在尝试在模型创建后获取它。问题是事件被触发了,但我在前端什么都没有,所以我认为这只是一个前端问题,所以让我展示一些代码:
让我们从后端开始:
事件:
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
use App\Homework;
class HomeworkCreated implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $homework;
public function __construct($homework)
{
$this->homework = $homework;
}
public function broadcastOn()
{
return new Channel('subject.' . $this->homework->subject->id);
}
}
这就是我在控制器中触发它的方式:
$homework = new Homework([
'subject_id' => $request->subject_id,
'user_id' => auth()->user()->id,
'title' => $request->name,
'image' => $path,
'description' => $request->description,
'duedate' => $request->date
]);
$homework->save();
event(new HomeworkCreated($homework));
现在,正如我们所见,它正在返回一个频道,在我的 Laravel 回显服务器中显示为:
Channel: homewrk_database_subject.9 // This confuses me a bit
Event: App\Events\HomeworkCreated
当我说“它让我感到困惑”时,我的意思是我真的不知道这条路线是否真的是那条路线,所以现在我们来看看我的前端(react-native):
render() {
const echo = new Echo({
host: 'ws://127.0.0.1:6001',
broadcaster: 'socket.io',
client: Socketio,
});
echo
.channel('homewrk_database_subject.', this.props.navigation.getParam('id'))
.listen('HomeworkCreated', ev => this.homeworks.push(ev)); // trying to add the response to the array.
这段代码就在return 之前,因为这是一个类而不是函数组件。
我的目标是将新模型添加到获取的项目数组中以显示它
【问题讨论】:
-
使用这个```主机:window.location.hostname + ':6001' ```作为你的主机,频道名称是redis前缀,只需转到database.php配置文件和索引redis -> 选项 -> 前缀
标签: laravel react-native socket.io laravel-echo