Menjalankan skrip PHP dibelakang layar menggunakan laravel.
Home » Berita Hari Ini » Tutorial Laravel » Menjalankan skrip PHP dibelakang layar menggunakan laravel.

Menjalankan skrip PHP dibelakang layar menggunakan laravel.

menjalankan php dibelakang layar, php asyncrhonous

Menjalankan skrip php dibelakang layar, beberapa permasalahan mengharuskan untuk memisahkan proses. Misal ketika anda membuat sistem registrasi dan kirim email, dua proses tersebut saling terkait, sehingga jika menjalankan sistem registrasi maka harus menjalanakn sistem kirim email setelah berhasil maka akan menampilkan pesan sukses. Dua proses tersebut akan saling menunggu, dimana saat data disimpan / registrasi (proses menunggu 1) dan proses mengirim email (proses menunggu 2), proses tersebut bisa disederhakan menjadi proses registrasi (proses menunggu 1), proses kirim email akan dijalankan dibelakang layar menjadi tanpa menunggu proses kirim email selesai sehinggal waktu yang diperlukan menjadi cepat. Menjalankan php dibelakang layar akan lebih mudah jika menggunakan fitur job atau queue laravel, karena akan dipermudah dalam perbuatannya dan proses bisa disimpan didatabase sehinnga jika gagal akan dapat diulang.

Setelah tau gambarannya, sebaiknya instal dulu laravel setelah itu maka kita masuk ke dalam membuat job agar script php bisa berjalan dibelakang layar, beberapa langkah untuk membuat job di laravel

  1. Buat class job pada laravel
  2. Buat configurasi untuk job
  3. Buat classs controller agar bisa menjalankan job sebenarnya ini optional
  4. Jalankan job dengan php artisan atau pakai aplikasi supervisor

Membuat Class Job

Seperti biasa buka command promt pada window atau git cli dan pastikan pada folder root laravel terus ketikan perintah dibawah ini

php artisan make:job SendMailRegistrationJob

edit class SendMailRegistrationJob menjadi seperti ini

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Mail;

class SendMailRegistrationJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    private $sender;
    
    public function __construct($sender)
    {
        $this->sender = $sender;
    }

    public function handle()
    {
    	$sender = $this->sender;
        Mail::send('welcome', array(), function ($message) use ($sender) {
            $message->from('info@disqusweb.com', 'Disqusweb');
            $message->to($sender)->subject('Verifikasi Email');
        });
    }
}

Pada class SendMailRegistrationJob terdapat constructor yang digunakan untuk alamat untuk kirim surat sehingga email yang dikirim bisa sesuaikan dengan email yang dituju. sender akan disimpan sehingga jika gagal dalam menjalankan job data alamat email masih ada, sehingga bisa mengulangi proses yang gagal.

Konfigurasi Job

konfigurasi pada laravel untuk job sebenarnya tidak usah ribet untuk sesuatu yang sederhana, cukup bukan .env dan ganti atau tambahkan

QUEUE_CONNECTION=database
QUEUE_DRIVER=database

Konfigurasi ini akan menyimpan job kedalam database. untuk itu pastikan anda menghubungkan laravel dengan database akan bisa berjalan.
setelah itu simpan dan jalankan command pada CLI

php artisan config:cache

Membuat class Controller

Class ini untuk membantu anda menjalankan job, setelah membuat class controller maka saatnya menghubungkan dengan route agar bisa berjalan. Cara membuat class controller menggunakan CLI

php artisan make:controller SendMailController

Sekarang edit class SendMailController

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class SendMailController extends Controller
{
    public function index(Request $request)
    {
        dispatch((new \App\Jobs\SendMailRegistrationJob($request->sender))->delay( \Carbon\Carbon::now()->addMinutes(1) ));
        return response()->json([
        	'status' => true,
        	'code'	 => 200,
        	'message'	=> 'Berhasil'
        ]);
    }
}

Sekarang hubungkan route dengan controller dengan cara buka route web.php

Route::get(‘sendMail’, ‘SendMailController@index’);

Jalankan Job menggunakan PHP artisan

Buka command prom atau cli untuk menjalankan perintah dibawah ini

php artisan queue:work

saatnya untuk test dengan cara masukkan url domain/sendMail?sender=example@gmail.com, jika sudah dijalankan maka lihat pada terminal queue:work bila muncul job success maka job berhasil dijalankan

Untuk menjalankan script php dibelakang layar memang sudah disedikan oleh laravel dengan fitur queue walau ini sebenarnya kurang sesuai karena php sendiri setau saya belum bisa menjankan secara asynchronous, akan tetapi ini sangat membantu. Selanjutnya saya akan membahas queue lebih dalam lagi sehingga bisa menyelesaikan masalah yang lebih komplek.

Terima kasih sudah membaca jangan lupa komentarnya walau satu titik.

Tentang penulis : Rohani Suhadi
Tell us something about yourself.

Tinggalkan Komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *