Register Dengan Mengirim Email Verifikasi Menggunakan Laravel 5.x— Part 2
4. Buat listener event untuk mengirim email registrasi
Pada part 1 sebelumnya kita melihat bahwa method register()
sudah terdapat event Registered
jadi langkah kita selanjutnya membuat listener, terserah apapun nama listenernya. Cara nya mudah sekali dengan menggunakan command, tetapi sebelumnya kita harus mengetahui namespace dari event Registered
tadi, cara nya cukup membuka kembali file trait RegistersUsers
anda akan melihat trait RegistersUsers
menggunakan event dengan namespace Illuminate\Auth\Events\Registered
, namespace ini kita butuhkan untuk membuat listener dan mendeklarasikan event pada EventServiceProvider
yang terdapat pada app/Providers/EventServiceProvider.php
. Ketikkan perintah di bawah untuk membuat listenernya
php artisan make:listener RegisteredListener --event=Illuminate\\Auth\\Events\\Registered
Berikut hasilnya
Command nya akan membuat file baru pada app/Listeners
dengan nama file RegisteredListener.php
. Berikut hasilnya
Jangan lupa menambahkan event dan listener tersebut pada app/Providers/EventServiceProvider.php
seperti gambar di bawah ini
Pada RegisteredListener
kita akan mengirim email ketika event di trigger dari RegisterController
jadi kita perlu membuat class mailer baru untuk mengirim email kita, ya lagi-lagi menggunakan command
php artisan make:mail RegisterMail
Dan hasilnya akan seperti ini
Command tersebut membuat sebuah class baru dengan nama RegisterMail
yang terdapat pada app/Mail/RegisterMail.php
selanjutnya kita membuat email template sederhana dengan blade template.
5. Membuat email template sederhana
Tugas kita sekarang membuat sebuah file email template, silahkan membuat file baru dengan nama apapun dengan extensi .blade.php
di dalam direktori resources/views
di dalam direktori tersebut terserah anda mau membuat direktory baru lagi atau tidak, tapi kali ini saya akan membuat direktori baru dengan nama Mail
dan menggunakan nama file akuhpadamuh.blade.php
, sekali lagi nama file bebas. Kita isi dengan code di bawah ini (bebas jika mau modifikasi atau mempercantik tampilan emailnya)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Mail</title>
</head>
<body>
Selamat anda berhasil terdaftar, klik link <a href="{{$link}}">{{$link}}</a>
</body>
</html>
Di dalam template tersebut terdapat variable $link
yang nanti akan di gunakan untuk route verifikasi token register yang kita buat tadi.
Pada app/Mail/RegisterMail.php
kita akan melakukan perubahan yang dimana class RegisterMail
akan di kirimkan sebuah object dari model User
yang melakukan registrasi dan mengirim email tersebut pada method build()
hasilnya akan seperti ini
<?phpnamespace App\Mail;use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;class RegisterMail extends Mailable
{
use Queueable, SerializesModels;/**
* Create a new message instance.
*
* @return void
*/protected $user;public function __construct(\App\User $user)
{
$this->user = $user;
}/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('Mail.akuhpadamuh')->with([
'link'=>route('activating-account',$this->user->token_register)
]);
}
}
Pada method build()
kita menggunakan route
dengan nama ‘activating-account’
tetapi pada langkah-langkah sebelumnya belum kita buat jadi kita buat dahulu, pada file app/routes/web.php
masukkan route
baru dengan method GET
dan parameter token
berikut keseluruhan isi dari web.php
<?php/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/Route::get('/', function () {
return view('welcome');
});Auth::routes();Route::get('/register/{token}','Auth\RegisterController@activating')->name('activating-account');Route::get('/home', 'HomeController@index')->name('home');
Setelah itu kita membuat method baru untuk route yang baru kita tambahkan pada RegisterController
dengan nama activating
berikut isinya
public function activating($token)
{
$model = User::where('token_register', $token)->where('active', 0)->firstOrFail();
$model->active = true;
$model->save();
return 'akun anda telah aktif silahkan login.';
}
Kembali ke RegisteredListener.php
kemudian pada method handle()
kita akan menggunakan class Illuminate\Support\Facades\Mail
untuk mengirim email dengan menggunakan class RegisterMail
yang telah kita buat tadi. Jadi hasil nya akan seperti ini
<?phpnamespace App\Listeners;use Illuminate\Auth\Events\Registered;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Mail;class RegisteredListener
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}/**
* Handle the event.
*
* @param Registered $event
* @return void
*/
public function handle(Registered $event)
{
return Mail::to($event->user)->send(new \App\Mail\RegisterMail($event->user));
}
}
Silahkan test registrasi user, jika langkah sudah benar akan tampil seperti ini
Dan email yang terkirim akan seperti ini hasilnya
Jika tidak atau terdapat error bisa comment di sini.
Lanjut ke part 3
Terima kasih.