Laravel, как перехватить событие с помощью событий, отправленных сервером - PullRequest
0 голосов
/ 25 октября 2019

Laravel SSE (событие, отправленное сервером) - это отличное решение для продвижения изменений во внешнем интерфейсе, однако на стороне сервера нам необходим эффективный способ отслеживания обновленных записей перед отправкой уведомлениявнешний интерфейс. однако SSE требует контроллера для работы, проблема в том, как контроллер может захватывать события Laravel?

class HomeController extends Controller
{
    public function sse(SSE $sse)
    {
        // how to add the Laravel event listener here?
        return $sse->createResponse();
    }
}

1 Ответ

0 голосов
/ 27 октября 2019

Laravel обеспечивает событиями, слушателями, вещанием и каналами для связи с интерфейсом через события. Вам не нужно делать это в контроллерах. Вы можете определить широковещательные маршруты в

routes/channels.php

, затем вы можете определить события, которые по умолчанию включают в себя широковещательный метод в скаффолдинге.

public function broadcastOn()
{
    return new PrivateChannel('channel-name');
}

Привязать слушателей к событию и реализовать для него интерфейс «mustque»они выполняются как асинхронные задания. Вы также можете использовать уведомления Laravel, чтобы обеспечить живое уведомление. laravel broadcasting

Если вы все еще хотите захватить событие в контроллере, вы можете указать в EventServiceProvider как

class EventServiceProvider extends ServiceProvider
{

    protected $listen = [
        DownloadFile::class => [
          CompanyDashboardController::class,
        ],
    ];

    public function boot()
    {
        parent::boot();
    }
}

ваше событие будет выглядеть как

class DownloadFile
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $process_id;

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

Наконец, вы можете получить это событие в вашем контроллере следующим образом:

class CompanyDashboardController extends Controller
{

    public function __construct()
    {
      //constructor
    }
    public function handle(DownloadFile $event)
    {
        if($event->process_id == 1)
        {
            return "something";
        }

    }
}

Если вы имели в виду какое-либо событие Javascript вместо чтения Laravel Используйте отправленные сервером события для отправки сообщений в браузер

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