Як використовувати події та слухачі Laravel у своїй програмі
В основі Laravel – кілька цікавих функцій. Деякі з них – це трансляція, зберігання файлів, сповіщення, події тощо. Кожна з цих вбудованих функцій допомагає розробникам спростити загальні та складні завдання.
У цій статті ми обговорюємо події Laravel, які дозволяють зареєструвати слухача для конкретних подій, які відбуваються в додатку. Іншими словами, я можу сказати, що користувач зареєструвався, замовлення зробив, продукт додав – це всі події. І якщо вам потрібно запустити певну дію після цих подій, ви можете зареєструвати слухачів. Laravel автоматично телефонує слухачам, зареєстрованим для певних подій.
Для нашої статті я запроваджую подію для реєстрації користувачів. Як тільки користувач зареєструється в програмі, система повинна надіслати їм вітальний електронний лист. Тут реєстрація користувача є подією, а надсилання вітального електронного листа – слухачем.
Сказавши це, давайте подивимося, як використовувати події та слухачі у вашому додатку Laravel.
Реєстрація подій та слухачів у Laravel
Laravel надає EventServiceProvider
файл, в якому потрібно реєструвати ваші події та слухачів. У нашому випадку нам потрібно додати подію та слухач для реєстрації користувачів. Отже, відкрийте файл EventServiceProvider.php
і додайте UserRegistered
в нього подію.
app / Providers / 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". Усередині каталогу "програми / події" ви знайдете файл UserRegistered.php
. Подібним чином SendWelcomeEmail.php
файл знаходиться в каталозі ‘app / Listeners’.
Визначення подій та слухачів
Тепер ви готові до шаблону до події, зареєстрованої вашим користувачем. Наша мета – надіслати вітальний електронний лист користувачеві після реєстрації. Для надсилання електронного листа нам потрібен об’єкт користувача, який містить інформацію про користувача. У UserRegistered
випадку, якщо я передав об’єкт користувача його конструктору. Далі цей об’єкт передається слухачеві.
app / Події / 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
і напишіть код наступним чином.
app / Слухачі / 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
, ви можете зателефонувати на подію наступним чином.
app / Http / Controllers / 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 для автентифікації REST API
- Відправка електронної пошти через сервер SMTP Gmail в Laravel
- Система реєстрації та входу користувачів в Laravel