От автора: в Laravel события — это распознанные программой действия, которые могут обрабатываться определенным образом. События Laravel просто обеспечивают реализацию обработчика. Событие может обрабатываться следующим образом.
Шаг 1. Создайте класс Event. Класс Event можно создать, выполнив следующую команду.
1 |
php artisan make:event <event-class> |
Замените <event-class> на имя класса события. Созданный класс будет сохранен в папке app\Events.
Шаг 2. Создайте класс обработчика для обработки созданного события. Класс обработчика события можно создать, выполнив следующую команду.
1 |
php artisan handler:event <handler-class> --event = <event-class> |
Замените event-class на имя класса события, который мы создали в шаге 1, а класс handler-class замените на имя класса обработчика. Созданный класс обработчика будет сохранен в app\Handlers\Events.
Шаг 3 — Зарегистрируйте класс Event и его обработчик в классе EventServiceProvider. Теперь нам нужно зарегистрировать событие и его класс обработчика в файле app\Providers\EventServiceProvier.php. Этот файл содержит массив с именем $listen. В этом массиве нам нужно добавить класс события в качестве ключа, а класс обработчика события в качестве его значения.
Шаг 4 — Запуск события. Последний шаг — запустить событие с помощью вспомогательного класса Event Facade. Для этого должна вызываться функция fire(), которая принимает объект класса event. Событие может быть запущено, как показано ниже:
1 |
Event::fire(<Event Class Object>); |
Замените Event Class Object на имя объекта события.
Пример
Шаг 1. Создайте контроллер с именем CreateStudentController , выполнив следующую команду.
1 |
php artisan make:controller CreateStudentController --plain |
Шаг 2 — После выполнения данной команды вы получите следующий результат:
Шаг 3 — Скопируйте в файл app/Http/Controllers/CreateStudentController.php следующий код.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use DB; use App\Http\Requests; use App\Http\Controllers\Controller; use App\Events\StudentAdded; use Event; class CreateStudentController extends Controller { public function insertform(){ return view('stud_add'); } public function insert(Request $request){ $name = $request->input('stud_name'); DB::insert('insert into student (name) values(?)',[$name]); echo "Record inserted successfully.<br/>"; echo '<a href = "/event">Click Here</a> to go back.'; // запуск события Event::fire(new StudentAdded($name)); } } |
Шаг 4 — Создайте событие с именем StudentAdded, выполнив следующую команду.
1 |
php artisan make:event StudentAdded |
Шаг 5 — После выполнения данной команды вы получите следующий результат:
Шаг 6 – Приведенная выше команда создаст событие в файле App\Events\StudentAdded.php. Скопируйте в этот файл следующий код.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php namespace App\Events; use App\Events\Event; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; class StudentAdded extends Event { use SerializesModels; public $name; public function __construct($name) { $this->name = $name; } public function broadcastOn() { return []; } } |
Шаг 7 — Создайте обработчик события HandleNewStudentAdded, выполнив следующую команду.
1 |
php artisan handler:event HandlerNewStudentAdded --event = StudentAdded |
Шаг 8 — После выполнения данной команды вы получите следующий результат:
Шаг 9 – Приведенная выше команда создаст обработчик события в файле app\Handlers\Events\HandleNewStudentAdded.php. Скопируйте в этот файл следующий код.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php namespace App\Handlers\Events; use App\Events\StudentAdded; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; class HandleNewStudentAdded { protected $name; public function __construct() { // } public function handle(StudentAdded $event) { $this->name = $event->name; echo "<br>New Student added in database with name: ".$this->name; } } |
Шаг 10 — Теперь нам нужно добавить класс события в класс обработчика этого события в файле app\Providers\EventServiceProvider.php. Обратите внимание на выделенную жирным шрифтом строку и добавьте ее в файл.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?php namespace App\Providers; use Illuminate\Contracts\Events\Dispatcher as DispatcherContract; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; class EventServiceProvider extends ServiceProvider { /** * размещение обработчика событий для приложения * * массив @var */ protected $listen = [ 'App\Events\SomeEvent' => [ 'App\Listeners\EventListener', ], 'App\Events\StudentAdded' => [ 'App\Handlers\Events\HandleNewStudentAdded', ], ]; /** * Регистрация остальных событий для вашего приложения. * * @param \Illuminate\Contracts\Events\Dispatcher $events * @return void */ public function boot(DispatcherContract $events) { parent::boot($events); // } } |
Шаг 11 — Добавьте в файл app/Http/routes.php следующие строки.
1 2 |
Route::get('event','CreateStudentController@insertform'); Route::post('addstudent','CreateStudentController@insert'); |
Шаг 12 – Перейдите по следующему URL-адресу, чтобы проверить событие. //localhost:8000/event
Шаг 13 — Вы должны увидеть на экране следующее:
Шаг 14 — Введите имя студента и нажмите кнопку «Add student», вы будете перенаправлены на следующую страницу. Обратите внимание на строку выделенную серым цветом. Мы добавили эту строку в метод обработчика класса HandleNewStudentAdded, она информирует о том, что при запуске события в методе обработчика были выполнены операторы.
Источник: //www.tutorialspoint.com/
Редакция: Команда webformyself.