Как использовать события и слушатели Laravel в вашем приложении
В основе Laravel есть несколько интересных функций. Некоторые из них – это широковещание, хранилище файлов, уведомления, события и т.д. Каждая из этих встроенных функций помогает разработчикам упростить общие и сложные задачи.
В этой статье мы обсуждаем события Laravel, которые позволяют нам зарегистрировать слушателя для определенных событий, которые происходят в приложении. Другими словами, я могу сказать, что пользователь зарегистрирован, заказ размещен, продукт добавлен – все это события. И если вам нужно запустить какое-то действие после этих событий, вы можете зарегистрировать слушателей. Laravel автоматически вызывает слушателей, зарегистрированных для определенных событий.
В нашей статье я реализую событие для регистрации пользователя. После того, как пользователь зарегистрировался в приложении, система должна отправить ему приветственное письмо. Здесь регистрация пользователя – это событие, а отправка приветственного письма – это слушатель.
Сказав это, давайте посмотрим, как использовать события и прослушиватели в вашем приложении Laravel.
Регистрация событий и слушателей в Laravel
Laravel предоставляет EventServiceProvider
файл, в котором вам нужно зарегистрировать свои события и слушателей. В нашем случае нам нужно добавить событие и прослушиватель для регистрации пользователя. Итак, откройте файл EventServiceProvider.php
и добавьте UserRegistered
в него событие.
приложение / Провайдеры / EventServiceProvider.php
...
...
class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'AppEventsUserRegistered' => [
'AppListenersSendWelcomeEmail',
],
];
Пользователь может добавить в этот массив любое количество событий в зависимости от требований. Затем сгенерируйте события Laravel, выполнив команду:
php artisan event:generate
Эта команда создает каталоги «События» и «Слушатели» в папке «app». Внутри каталога app / Events вы найдете файл UserRegistered.php
. Точно так же SendWelcomeEmail.php
файл находится в каталоге app / Listeners.
Определение событий и слушателей
Теперь у вас есть шаблон для вашего зарегистрированного пользователем события. Наша цель – отправить пользователю приветственное письмо после регистрации. Чтобы отправить электронное письмо, нам нужен объект пользователя, который содержит информацию о пользователе. В UserRegistered
случае, если я передал объект пользователя в его конструктор. Затем этот объект будет передан слушателю.
приложение / События / UserRegistered.php
<?php
namespace AppEvents;
....
use AppUser;
class UserRegistered
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $user;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(User $user)
{
$this->user = $user;
}
}
Код, который отправляет электронное письмо пользователю, войдет в файл прослушивателя. Откройте слушатель SendWelcomeEmail
и напишите код следующим образом.
приложение / Слушатели / SendWelcomeEmail.php
<?php
namespace AppListeners;
....
use Mail;
class SendWelcomeEmail
{
....
....
/**
* Handle the event.
*
* @param UserRegistered $event
* @return void
*/
public function handle(UserRegistered $event)
{
$data = array('name' => $event->user->name, 'email' => $event->user->email, 'body' => 'Welcome to our website. Hope you will enjoy our articles');
Mail::send('emails.mail', $data, function($message) use ($data) {
$message->to($data['email'])
->subject('Welcome to our Website');
$message->from('[email protected]');
});
}
}
В приведенном выше файле я написал код для отправки электронной почты в handle
методе класса слушателя. Это связано с тем, что handle
метод получает вызов после возникновения события регистрации пользователя.
Я также использовал первый параметр как «emails.mail» в методе Mail. Это означает, что вы должны создать resources/views/emails/mail.blade.php
файл.
mail.blade.php
Hi <strong>{{ $name }}</strong>,
<p>{{ $body }}</p>
Наконец вызовите событие
На этом этапе у вас все готово со своим событием и слушателем. Остается последний шаг – вызвать событие из соответствующего места. Допустим, вы используете UserController для регистрации пользователя. Таким образом UserController
, вы можете позвонить на мероприятие следующим образом.
приложение / HTTP / Контроллеры / UserController.php
<?php
namespace AppHttpControllers;
....
use AppEventsUserRegistered;
use AppUser;
class UserController extends Controller
{
.....
.....
/**
* Store a newly created resource in storage.
*
* @param IlluminateHttpRequest $request
* @return IlluminateHttpResponse
*/
public function store(Request $request)
{
$user = User::create([
'name' => $request->input('name'),
'email' => $request->input('email'),
'password' => bcrypt($request->input('password')),
]);
// call our event here
event(new UserRegistered($user));
return $user;
}
}
Теперь, когда пользователь зарегистрировался, приведенный выше код вызывает событие UserRegistered, которое в конечном итоге вызывает слушателя. Затем слушатель отправляет пользователю приветственное письмо.
Надеюсь, вы понимаете, как использовать события и слушателей в вашем приложении Laravel. Пожалуйста, поделитесь своими мыслями и предложениями в разделе комментариев ниже.
Статьи по Теме
- Как использовать Laravel Passport для аутентификации REST API
- Отправка электронной почты через SMTP-сервер Gmail в Laravel
- Система регистрации и входа пользователей в Laravel