Обработчики и прослушиватели событий Laravel

#events #laravel #laravel-4 #listeners #handlers

#Мероприятия #laravel #laravel-4 #прослушиватели #обработчики

Вопрос:

У меня есть вопрос о обработчиках событий и слушателях Laravel. Я понятия не имею, с чего начать.

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

Любая помощь была бы оценена 😉

Ответ №1:

Недавно я внедрил канал для действий, например, когда создается запись, регистрируется новый пользователь или что-то еще. Каждое действие запускает событие, и для каждого события есть прослушиватель, который сохраняет что-то вроде «Пользователь XY только что зарегистрирован!» в базе данных.

Самая базовая версия:

 // app/controllers/RegistrationController.php
class RegistrationController {
    public function register($name) {
        User::create([
            'name' => $name
        });

        Event::fire('user.registered', [$name]);
    }
}

// app/events.php
Event::listen('user.registered', function($name) {
    DB::table('feed')->insert(
        [
            'action' => 'User ' . $name . ' just registered!'
            // ...
        }
    );
});
  

Чтобы использовать events.php файл, добавьте следующую строку в свой app/start/global.php

 require app_path().'/events.php';
  

Теперь вы можете поместить все события в events.php .


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

Комментарии:

1. Спасибо! именно то, что мне было нужно 🙂 Это упрощает тестирование моих контроллеров.

2. Привет, @Melvin Koopmans, я хочу запустить событие при входе пользователя в систему. Я использую laravel 5, встроенный в auth. Где я должен запустить событие?

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