-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #94 from feat/93/add-example-for-event-listener
Add example for event listener
- Loading branch information
Showing
10 changed files
with
454 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
<?php | ||
|
||
namespace App\Events\User; | ||
|
||
use App\Models\User\User; | ||
use Illuminate\Broadcasting\Channel; | ||
use Illuminate\Broadcasting\InteractsWithSockets; | ||
use Illuminate\Broadcasting\PresenceChannel; | ||
use Illuminate\Broadcasting\PrivateChannel; | ||
use Illuminate\Contracts\Broadcasting\ShouldBroadcast; | ||
use Illuminate\Foundation\Events\Dispatchable; | ||
use Illuminate\Queue\SerializesModels; | ||
|
||
class UserCreated | ||
{ | ||
use Dispatchable, InteractsWithSockets, SerializesModels; | ||
|
||
/** | ||
* Create a new event instance. | ||
*/ | ||
public function __construct( | ||
public readonly User $user, | ||
) { | ||
// | ||
} | ||
|
||
/** | ||
* Get the channels the event should broadcast on. | ||
* | ||
* @return array<int, \Illuminate\Broadcasting\Channel> | ||
*/ | ||
public function broadcastOn(): array | ||
{ | ||
return [ | ||
new PrivateChannel('channel-name'), | ||
]; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
<?php | ||
|
||
namespace App\Listeners\User; | ||
|
||
use App\Events\User\UserCreated; | ||
use App\Mail\User\WelcomeMail; | ||
use Illuminate\Contracts\Queue\ShouldQueue; | ||
use Illuminate\Queue\InteractsWithQueue; | ||
use Illuminate\Support\Facades\Mail; | ||
|
||
class SendWelcomeMail implements ShouldQueue | ||
{ | ||
/** | ||
* Create the event listener. | ||
*/ | ||
public function __construct() | ||
{ | ||
// | ||
} | ||
|
||
/** | ||
* Handle the event. | ||
*/ | ||
public function handle(UserCreated $event): void | ||
{ | ||
Mail::send(new WelcomeMail($event->user)); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace App\Mail\User; | ||
|
||
use App\Models\User\User; | ||
use Illuminate\Bus\Queueable; | ||
use Illuminate\Contracts\Queue\ShouldQueue; | ||
use Illuminate\Mail\Mailable; | ||
use Illuminate\Mail\Mailables\Address; | ||
use Illuminate\Mail\Mailables\Content; | ||
use Illuminate\Mail\Mailables\Envelope; | ||
use Illuminate\Queue\SerializesModels; | ||
|
||
class WelcomeMail extends Mailable implements ShouldQueue | ||
{ | ||
use Queueable, SerializesModels; | ||
|
||
/** | ||
* Create a new message instance. | ||
*/ | ||
public function __construct( | ||
public readonly User $user, | ||
) { | ||
// | ||
} | ||
|
||
/** | ||
* Get the message envelope. | ||
*/ | ||
public function envelope(): Envelope | ||
{ | ||
return new Envelope( | ||
subject: 'Welcome Mail', | ||
from: new Address('[email protected]', 'Mr. Example'), | ||
to: [new Address($this->user->email, $this->user->name)], | ||
); | ||
} | ||
|
||
/** | ||
* Get the message content definition. | ||
*/ | ||
public function content(): Content | ||
{ | ||
return new Content( | ||
html: "mail.user.welcome-mail", | ||
with: [ | ||
'name' => $this->user->name, | ||
], | ||
); | ||
} | ||
|
||
/** | ||
* Get the attachments for the message. | ||
* | ||
* @return array<int, \Illuminate\Mail\Mailables\Attachment> | ||
*/ | ||
public function attachments(): array | ||
{ | ||
return []; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,173 @@ | ||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | ||
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office"> | ||
|
||
<head> | ||
<!--[if gte mso 9]> | ||
<xml> | ||
<o:OfficeDocumentSettings> | ||
<o:AllowPNG/> | ||
<o:PixelsPerInch>96</o:PixelsPerInch> | ||
</o:OfficeDocumentSettings> | ||
</xml> | ||
<![endif]--> | ||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | ||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
<meta name="x-apple-disable-message-reformatting"> | ||
<!--[if !mso]><!--> | ||
<meta http-equiv="X-UA-Compatible" content="IE=edge"><!--<![endif]--> | ||
<title></title> | ||
|
||
<style type="text/css"> | ||
@media only screen and (min-width: 520px) { | ||
.u-row { | ||
width: 500px !important; | ||
} | ||
|
||
.u-row .u-col { | ||
vertical-align: top; | ||
} | ||
|
||
.u-row .u-col-100 { | ||
width: 500px !important; | ||
} | ||
|
||
} | ||
|
||
@media (max-width: 520px) { | ||
.u-row-container { | ||
max-width: 100% !important; | ||
padding-left: 0px !important; | ||
padding-right: 0px !important; | ||
} | ||
|
||
.u-row .u-col { | ||
min-width: 320px !important; | ||
max-width: 100% !important; | ||
display: block !important; | ||
} | ||
|
||
.u-row { | ||
width: 100% !important; | ||
} | ||
|
||
.u-col { | ||
width: 100% !important; | ||
} | ||
|
||
.u-col>div { | ||
margin: 0 auto; | ||
} | ||
} | ||
|
||
body { | ||
margin: 0; | ||
padding: 0; | ||
} | ||
|
||
table, | ||
tr, | ||
td { | ||
vertical-align: top; | ||
border-collapse: collapse; | ||
} | ||
|
||
p { | ||
margin: 0; | ||
} | ||
|
||
.ie-container table, | ||
.mso-container table { | ||
table-layout: fixed; | ||
} | ||
|
||
* { | ||
line-height: inherit; | ||
} | ||
|
||
a[x-apple-data-detectors='true'] { | ||
color: inherit !important; | ||
text-decoration: none !important; | ||
} | ||
|
||
table, | ||
td { | ||
color: #000000; | ||
} | ||
</style> | ||
|
||
|
||
|
||
</head> | ||
|
||
<body class="clean-body u_body" style="margin: 0;padding: 0;-webkit-text-size-adjust: 100%;background-color: #e7e7e7;color: #000000"> | ||
<!--[if IE]><div class="ie-container"><![endif]--> | ||
<!--[if mso]><div class="mso-container"><![endif]--> | ||
<table style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;min-width: 320px;Margin: 0 auto;background-color: #e7e7e7;width:100%" cellpadding="0" cellspacing="0"> | ||
<tbody> | ||
<tr style="vertical-align: top"> | ||
<td style="word-break: break-word;border-collapse: collapse !important;vertical-align: top"> | ||
<!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td align="center" style="background-color: #e7e7e7;"><![endif]--> | ||
|
||
|
||
|
||
<div class="u-row-container" style="padding: 0px;background-color: transparent"> | ||
<div class="u-row" style="margin: 0 auto;min-width: 320px;max-width: 500px;overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;background-color: transparent;"> | ||
<div style="border-collapse: collapse;display: table;width: 100%;height: 100%;background-color: transparent;"> | ||
<!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding: 0px;background-color: transparent;" align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:500px;"><tr style="background-color: transparent;"><![endif]--> | ||
|
||
<!--[if (mso)|(IE)]><td align="center" width="500" style="width: 500px;padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;border-radius: 0px;-webkit-border-radius: 0px; -moz-border-radius: 0px;" valign="top"><![endif]--> | ||
<div class="u-col u-col-100" style="max-width: 320px;min-width: 500px;display: table-cell;vertical-align: top;"> | ||
<div style="height: 100%;width: 100% !important;border-radius: 0px;-webkit-border-radius: 0px; -moz-border-radius: 0px;"> | ||
<!--[if (!mso)&(!IE)]><!--> | ||
<div style="box-sizing: border-box; height: 100%; padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;border-radius: 0px;-webkit-border-radius: 0px; -moz-border-radius: 0px;"><!--<![endif]--> | ||
|
||
<table style="font-family:arial,helvetica,sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0"> | ||
<tbody> | ||
<tr> | ||
<td style="overflow-wrap:break-word;word-break:break-word;padding:10px;font-family:arial,helvetica,sans-serif;" align="left"> | ||
|
||
<!--[if mso]><table width="100%"><tr><td><![endif]--> | ||
<h1 style="margin: 0px; line-height: 140%; text-align: center; word-wrap: break-word; font-family: inherit; font-size: 22px; font-weight: 400;"><span>Unleash Your Creativity with Our Dummy</span></h1> | ||
<!--[if mso]></td></tr></table><![endif]--> | ||
|
||
</td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
|
||
<table style="font-family:arial,helvetica,sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0"> | ||
<tbody> | ||
<tr> | ||
<td style="overflow-wrap:break-word;word-break:break-word;padding:10px;font-family:arial,helvetica,sans-serif;" align="left"> | ||
|
||
<div style="font-size: 14px; line-height: 140%; text-align: left; word-wrap: break-word;"> | ||
<p style="line-height: 140%;">Welcome, <?= $name ?></p> | ||
</div> | ||
|
||
</td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
|
||
<!--[if (!mso)&(!IE)]><!--> | ||
</div><!--<![endif]--> | ||
</div> | ||
</div> | ||
<!--[if (mso)|(IE)]></td><![endif]--> | ||
<!--[if (mso)|(IE)]></tr></table></td></tr></table><![endif]--> | ||
</div> | ||
</div> | ||
</div> | ||
|
||
|
||
|
||
<!--[if (mso)|(IE)]></td></tr></table><![endif]--> | ||
</td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
<!--[if mso]></div><![endif]--> | ||
<!--[if IE]></div><![endif]--> | ||
</body> | ||
|
||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.