Как исправить выбрасывание Laravel FatalThrowableError при попытке трансляции нового события - PullRequest
1 голос
/ 27 мая 2019

Я следовал учебному пособию, чтобы Laravel транслировался в режиме реального времени, но застрял через несколько минут. Laravel выдает мне следующее сообщение: « Аргумент 1, передаваемый в Illuminate \ Database \ Grammar :: parameterize (), должен иметь тип массива, заданный целым числом, вызываемый в / home / vagrant / code / vendor / laravel / framework / src / Illuminate / Database / Query / Grammars / Grammar.php в строке 775"

Я несколько раз пытался повторить урок, чтобы убедиться, что ничего не пропустил, но проблема остается той же после нескольких попыток. Даже проверка трассировки стека и документации не дали мне никакой подсказки.

Я раскомментировал следующую строку в config/app.php:

App\Providers\BroadcastServiceProvider::class,

Я добавил следующие строки в App\Providers\EventServiceProvider:

use App\Events\RideCreated;
use App\Listeners\RideCreatedListener;

и следующие после protected $listen = [ в том же файле

    RideCreated::class => [
        RideCreatedListener::class,
    ],

это настройка маршрута, используемого для тестирования (web.php):

Route::get('/test', function(){
    event(new RideCreated());
    return "test";
});

и вот как RideCreated.php выглядит так:

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

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

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return new Channel('RideCreated');
    }
}

слушатель (RideCreatedListener.php) выглядит так:

<?php

namespace App\Listeners;

use App\Events\RideCreated;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class RideCreatedListener
{

    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  RideCreated  $event
     * @return void
     */
    public function handle(RideCreated $event)
    {
        //
    }
}

Я ожидал, что при посещении / test маршрутов, чтобы увидеть тест на экране, но на самом деле получил сообщение об ошибке.

моей первой мыслью было, что реализация ShouldBroadcast в RideCreated.php как-то вызывает проблему, так как удаление implement ShouldBroadcast делает ошибку исчезающей. единственная проблема заключается в том, что удалить его нельзя, так как он необходим для работы Pusher.

1 Ответ

2 голосов
/ 28 мая 2019

Это может звучать странно, но мы решили эту проблему f2f.Мой ответ только для тех, кто мог бы прочитать это.

Оказалось, что очередь не была настроена так, что очередь по умолчанию могла быть разрешена Laravel.Ошибка была исправлена ​​добавлением свойства $bradcastQueue в класс RideCreated.См. Широковещательная очередь

...