问题
我可以确认Pusher API正在接收消息。我在Pusher网站的Debug控制台中看到了。但听回调根本不起作用。
我正在关注 this tutorial to implement Pusher in Laravel 5.4
以下是一步一步的事情。
composer require pusher/pusher-php-server
npm install --save laravel-echo pusher-js
resources/assets/js/bootstrap.js
env
和bootstrap.js
文件中初始化推送键。最后,我在下面用刀片编写了代码。
<script>
window.Echo.channel('SendMessageChannel.1')
.listen('App.Events.SendMessageEvent', (e) => {
console.log(e);
});
</script>
控制器代码
broadcast(new SendMessageEvent("Hi"))->toOthers();
活动代码
class SendMessageEvent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $Message;
public function __construct($message)
{
$this->Message = $message;
}
public function broadcastOn()
{
return new PrivateChannel('SendMessageChannel.2');
}
}
我错过了什么吗?
答案 0 :(得分:5)
SendMessageEvent
没有命名空间。private-SendmessageChannel
或使用Echo.private('SendmessageChannel')
因为我们通过在某些部分的团队说法修复了这个问题,所以很难在这个答案中详细解释它。
在客户开始收听事件之前,事件也被解雇了。最好的方法是使用推送器控制台进行调试并触发自定义事件。
答案 1 :(得分:2)
自项目开始6个月以来,我一直非常有效地使用Laravel 5.4事件。我在初始设置时遇到了同样的麻烦。让我用你所做的一切来指导你,让它发挥作用。
我可以看到您$('.btn-success').click(function () {
var CSV = [
'"1","val1","val2","val3","val4"',
'"2","val1","val2","val3","val4"',
'"3","val1","val2","val3","val4"'
].join('\n');
window.URL = window.webkitURL || window.URL;
var contentType = 'text/csv';
var csvFile = new Blob([CSV], { type: contentType });
var xmlcsv = document.createElement('a');
xmlcsv.download = 'XMLtoCSV.csv';
xmlcsv.href = window.URL.createObjectURL(csvFile);
xmlcsv.textContent = 'Download CSV';
xmlcsv.dataset.downloadurl = [contentType, xmlcsv.download, xmlcsv.href].join(':');
console.log(xmlcsv);
//document.body.appendChild(xmlcsv);
xmlcsv.click();
});
发起了一个事件,controller
向pusherjs发送消息内容。你需要检查以下内容才能实现目标。
检查1:
但是你没有提到你是否定义了一个Eventhandler。事件处理程序作为SendMessageEvent
与其实际广播者之间的桥梁。
因此,定义一个Eventhandler创建一个像SendMessageEvent
这样的文件夹。 (这里处理程序和事件是文件夹。其中事件在处理程序中)
在此Events文件夹中创建一个名称为<。p>的文件
app / Handlers / Events /
并将此代码放入其中:
HandleMyMessage.php
检查2:
<?php
namespace App\Handlers\Events;
use App\Events\SendMessageEvent; // This should be your event class..
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class HandleMyMessage{
protected $name;
public function __construct() {
//
}
public function handle(Message $event) {
// No need to write anything here
}
}
位置应该有一个提供商,并将以下代码放在app / Providers / EventServiceProvider.php
EventServiceProvider.php
检查3: 您应该在控制器中更改发送事件消息的语法,如下所示:
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Event;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'App\Events\SendMessageEvent' => [
'App\Handlers\Events\EventServiceProvider',
],
];
/**
* Register any events for your application.
*
* @return void
*/
public function boot()
{
parent::boot();
}
}
更多相关信息,您还需要在系统上安装Redis并运行它。
希望这会有所帮助。如果您需要上述任何信息,请发表评论。我发布了相同的参考链接。
快乐编码!!! : - )
答案 2 :(得分:0)
我得到了它的工作。下面是正确的代码。我希望这对其他人发送实时信息非常有用。
Js Work
zip
控制器代码
<script>
window.Echo.channel('private-SendMessageChannel.{!! \Auth::user()->UserID !!}')
.listen('SendMessageEvent', (e) => {
console.log(e);
});
</script>
活动代码
broadcast(new SendMessageEvent("Hi", 1))->toOthers();
//Here 1 is recepient ID