在Pusher API Laravel 5.4中,回调功能无效

时间:2017-03-29 19:18:42

标签: laravel laravel-5.4

问题

我可以确认Pusher API正在接收消息。我在Pusher网站的Debug控制台中看到了。但听回调根本不起作用。

我正在关注 this tutorial to implement Pusher in Laravel 5.4

以下是一步一步的事情。

  1. composer require pusher/pusher-php-server
  2. npm install --save laravel-echo pusher-js
  3. resources/assets/js/bootstrap.js
  4. 中实例化了Echo实例
  5. envbootstrap.js文件中初始化推送键。
  6. 最后,我在下面用刀片编写了代码。

    <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');
        }
    
    }
    

    我错过了什么吗?

3 个答案:

答案 0 :(得分:5)

  1. 你必须听:SendMessageEvent没有命名空间。
  2. 当您收听私人频道时,您需要收听private-SendmessageChannel或使用Echo.private('SendmessageChannel')
  3. 因为我们通过在某些部分的团队说法修复了这个问题,所以很难在这个答案中详细解释它。

    在客户开始收听事件之前,事件也被解雇了。最好的方法是使用推送器控制台进行调试并触发自定义事件。

答案 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