Laravel adalah Framework PHP yang sangat komplit menurut saya, karena hadir dengan fitur-fitur yang modern dan lengkap diantara lainnya. Anda bisa menggunakan Laravel untuk Skala Kecil maupun besar tergantung kebutuhan anda.
Ketika anda akan mengirimkan email, invoice, estimasi dari Framework laravel maka anda perlu menggunakan fitur Notification
dan saat ini saya akan membahas notifikasi dengan Email saja. Jika anda ingin menggunakan notifikasi ke channel lain anda bisa menggunakan Laravel Notification Channel.
Oke sekarang kita harus membuat notification_table
atau mempublish table notifications
ketik diterminal :
php artisan notifications:table
dan akan membuat otomatis file di folder database/migrations
dengan nama file xxx_create_notifications_table.php
lalu lakukan migration
php artisan migrate
Sekarang kita buat Class Notification baru dengan memasukan perintah :
php artisan make:notification InvoicePaid
yang mana akan tercipta file di folder App/Notifications
dengan file InvoicePaid.php
jangan lupa juga untuk menambahkan Notifiable
di model yang akan diberi notifikasi, contohnya disini model User
karena mengandung email untuk menerima Notifikasi.
<?php namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; class User extends Authenticatable { use Notifiable; }
Untuk memastikan arah Notifikasi ke email user maka tambahkan juga :
// Tambahkan ini di User Model `App\Models/User` public function routeNotificationForMail($notification) { // Jika di table users ada kolom email untuk notifikasi return $this->email; // Jika di table users ada kolom email dan nama untuk notifikasi return [$this->email => $this->name]; }
Saatnya mengatur Notifikasi yang tadi kita buat di App/Notifications/InvoicePaid
di bagian toMail
ubah dengan notifikasi yang anda inginkan misalnya :
/** * Get the mail representation of the notification. * * @param mixed $notifiable * @return \Illuminate\Notifications\Messages\MailMessage */ public function toMail($notifiable) { return (new MailMessage) // Sample Parameter Error // ->error() ->greeting('Hi Bro!') ->subject('Notification Subject') ->from('barrett@example.com', 'Barrett Blair') ->line('...') ->attach('/direktori/file.pdf'); }
Jika anda menginginkan lebih leluasa dengan isi emailnya maka :
php artisan make:notification InvoicePaid --markdown=mail.invoice.paid
dan akan membuat file di folder resources/views/mail/invoice/paid.blade.php
dan anda bisa mengeditnya dengan bahasa markdown
dan ubah file InvoicePaid
menjadi seperti ini :
/** * Get the mail representation of the notification. * * @param mixed $notifiable * @return \Illuminate\Notifications\Messages\MailMessage */ public function toMail($notifiable) { $url = url('/invoice/'.$this->invoice->id); return (new MailMessage) ->subject('Invoice Paid') ->markdown('mail.invoice.paid', ['url' => $url]); }
Ubah juga isi emailnya di folder resources/views/mail/invoice/paid.blade.php
menjadi :
@component('mail::message') # Invoice Paid Your invoice has been paid! @component('mail::button', ['url' => $url]) View Invoice @endcomponent Thanks,<br> {{ config('app.name') }} @endcomponent
Untuk Fitur-fitur Email nanti akan saya bahas di artikel selanjutnya.
Ubah file InvoicePaid.php
tadi bagian bawahnya di method toArray
dengan parameter yang anda inginkan contohnya seperti ini.
/** * Get the array representation of the notification. * * @param mixed $notifiable * @return array */ public function toArray($notifiable) { return [ 'invoice_id' => $this->invoice->id, 'amount' => $this->invoice->amount, ]; }
Dan anda bisa memunculkan notifikasi di setiap user dengan cara seperti ini :
$user = App\Models\User::find(1); foreach ($user->notifications as $notification) { echo $notification->type; }
Untuk mengirimkan notifikasi anda perlu memberikan triger di controller / proses / action yang anda buat :
use Illuminate\Support\Facades\Notification; Notification::send($users, new InvoicePaid($invoice));
Atau anda juga bisa menggunakan Delay
background job atau queue
dengan menambahkan seperti ini :
// parameter $delay ini berarti pekerjaan pengiriman email akan ditunda 10menit $delay = now()->addMinutes(10); $user->notify((new InvoicePaid($invoice))->delay($delay));
Biasanya ketika anda akan mengirimkan email maka diperlukan sender provider dan sekarang kita contohkan menggunakan Mailtrap sebelum menginstall / menggunakan Mailtrap install terlebih dahulu Guzzle Package :
composer require guzzlehttp/guzzle
Daftar terlebih dahulu di Mailtrap secara gratis untuk mendapatkan Credential
untuk kita terapkan di .env
file.
Lalu edit di .env
file anda dan ubah seperti ini :
MAIL_MAILER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=xxxxxx MAIL_PASSWORD=xxxxxx MAIL_ENCRYPTION=tls
Jika sudah lalu coba proses pengiriman email tersebut.
happy coding....