Register Dengan Mengirim Email Verifikasi Menggunakan Laravel 5.x— Part 2

Chengcheng
4 min readDec 10, 2017

--

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

Artisan Listener Event Registered

Command nya akan membuat file baru pada app/Listeners dengan nama file RegisteredListener.php. Berikut hasilnya

RegisteredListener.php

Jangan lupa menambahkan event dan listener tersebut pada app/Providers/EventServiceProvider.php seperti gambar di bawah ini

EventServiceProvider.php

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

Artisan make mailer class

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

Hasil register user

Dan email yang terkirim akan seperti ini hasilnya

Email

Jika tidak atau terdapat error bisa comment di sini.

Lanjut ke part 3
Terima kasih.

--

--