Laravel 5.5事件未触发。

3
我正在使用 Laravel 5.5。我将我的 BROADCAST_DRIVER 设置为“log”,但当我访问链接以触发事件时,什么也没有发生。 laravel.log 文件仍然为空。我已经在 config/app.php 中取消注释了 BroadcastServiceProvider。这是我的代码。

.env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=myDatabase
DB_USERNAME=root
DB_PASSWORD=numberPassword

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=database

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

config/app.php

App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,

app/Events/ReloadTableEvent.php

class ReloadTableEvent implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    protected $coinData;

    public function __construct($coinData)
    {
        $this->coinData = $coinData;
    }

    public function broadcastWith()
    {
      return ['coin' => $this->coinData];
    }

    public function broadcastAs()
    {
      return 'reload-event';
    }

    public function broadcastOn()
    {
        return new Channel('reload-channel');
    }
}

app/Http/Controllers/ReloadTableController.php

public function reloadTable()
{
  $coin = Coin::take(50)->get();
  $event = new ReloadTableEvent($coin);
  event($event);
}

我已经执行了以下操作:

  • php artisan config:clear
  • php artisan cache:clear
  • php artisan optimize
  • php artisan clear-compiled
  • composer update
  • composer dump-autoload

但仍然没有效果。请问还有其他方法吗?

更新1:

我还没有使用监听器。当我创建新项目并设置与当前项目相同的选项时,它可以正常工作。

存储/log/laravel.log

[2018-01-08 06:24:02] local.INFO: Broadcasting [reload-event] on channels [reload-channel] with payload:
{
    "coin": {
        "name": "Test"
    },
    "socket": null
}  

展示你的监听器。 - Sohel0415
@Sohel0415 已经更新了我的问题。 - skadevz
1个回答

1

您应该通过 php artisan queue:work 监听事件。


我没有使用队列。当我尝试在新的项目中使用相同的选项时,它可以正常工作且不需要队列。 - skadevz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接