Для чего предназначены те События в laravel?


Никогда не использовал События в Laravel и хотел бы знать, какова цель, и если она имеет какое-то преимущество.

Author: Wallace Maxters, 2016-12-09

1 answers

- Это функция в Laravel, который предоставляет помощью вы сможете "слушать" события, которые происходят внутри внутри вашего приложения.

Приложения, написанного на Laravel (и других приложений), имеют каждый шаг четко определены:

  • Обработки запроса
  • отображение ответов
  • Соединение с базой данных
  • Обработка сессии
  • Пользователь, зайдя на сайт или deslogando
  • Попытка login

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

Через эти События, можно вызвать событие, чтобы определить что-то, что делается в той или иной шаг.

Таким образом, при определении "слушатель" (или "наблюдателя), чтобы это событие, он будет работать так, что это событие будет срабатывать.

Например, можно проверить, что происходит, когда view находится в процессе, в начале или конце рендеринга.

Например

Приведу простой пример, чтобы вы поняли: процесс захвата маршрута. Когда выражение url-адрес, ванная с выражение, которое вы определили в маршрут, события. Что касается Laravel 5, это класс с именем Illuminate\Routing\Events\RouteMatched.

"слушать" событие срабатывает, когда маршрут в плен, вы можете использовать класс Event сделать это.

Мы Можем установить этот "слушатель" внутри класса App\Providers\EventServiceProvider:

public function boot(DispatcherContract $events)
{
    parent::boot($events);

    \Event::listen(\Illuminate\Routing\Events\RouteMatched::class, function ($request) {

        dd('Evento da rota está sendo escutado');

    });
}

Примечание: выражение \Illuminate\Routing\Events\RouteMatched::class возвращает string. Имя события-это имя класса, и их имен.

В приведенном выше примере, когда вы получить доступ к любой действующий маршрут, Laravel запускает прослушиватель, который вы зарегистрировали '\Illuminate\Routing\Events\RouteMatched', что в случае, если это событие, касающееся захвата маршрутов.

Но кто сделал события?

Внутренне, когда маршрут не найден, то Laravel использует метод, называемый Illuminate\Contracts\Events\Dispatcher::fire. Этот метод отвечает за выполнение всех "слушателей", зарегистрированных для определенного события.

Другие примеры

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

Создаю мой собственный события

Можно вы создаете свой собственный событие, которое срабатывает таким образом, что действие выполняется.

Вы могли бы хотеть, чтобы вызвать событие каждый раз определяется каждый раз, когда пользователь получает доступ к некоей маршрут /admin после 18 часов дня (не забывая, что это всего лишь простой пример).

, То мы могли бы иметь что-то вроде:

public function boot(DispatcherContract $events)
{
    parent::boot($events);
     // Esse é o responsável por "ouvir/observar" um evento
    \Event::listen('admin.fora_de_expediente', function () {
         // Meu ouvinte faz um registro no banco
        DB::table('usuarios_logados_apos_18_horas')->insert([
             'usuario_id' => auth()->user()->id,
             'data_do_acesso' => new \DateTime
        ]);

    });
}

routes.php, мы можем определить:

Route::group(['prefix' => 'admin'], function () {

    if (date('H') >= 18) {
        // Esse é o responsável por disparar o "evento"
        Event::fire('admin.fora_de_expediente');
    }

    // Todas as definições de rotas do Administrador
});

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

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

Примечание: класс Event цит. по выдержкам ответ это-псевдоним для класса Illuminate\Contracts\Events\Dispatcher.

Показания рекомендуемые:

 9
Author: Wallace Maxters, 2020-06-11 14:45:34