Membuat Custom Laravel Artisan Command menggunakan Laravel Prompt

Beberapa waktu yang lalu pada saat development web menggunakan laravel ada kebutuhan untuk menambahkan custom command. Kabar baiknya di laravel sudah terdapat artisan command untuk membuat custom command. Karena kebetulan di timeline media sosial ada perkenalan tools baru di Laracon US pada tanggal 19 Juli 2023 lalut yaitu package Laravel Prompt. Ini cukup membuat saya penasaran untuk coba-coba buat custom command menggunakan package Laravel Prompt di tutorial kali ini.

Apa itu Laravel Prompt

Laravel Prompts adalah sebuah library PHP yang dapat digunakan untuk menambahkan form yang menarik dan ramah pengguna ke dalam aplikasi command line, dengan fitur seperti teks placeholder dan validasi layaknya di browser.

Laravel Prompts itu bukan hanya cocok digunakan untuk menerima input dari user dalam perintah console Artisan kita, tetapi juga bisa digunakan dalam proyek PHP berbasis command-line lainnya.

Contoh penggunaannya adalah ketika kita running artisan command, sebagai contoh di sini kita coba run php artisan make:controller, maka outputnya menjadi seperti di bawah ini.

php artisan make:controller

 ┌ What should the controller be named? ────────────────────────┐
 │ E.g. UserController                                          │
 └──────────────────────────────────────────────────────────────┘

Tampilannya mirip ketika kita akses form di browser. Sekarang kita coba ketik UserController, lalu enter.

php artisan make:controller

 ┌ What should the controller be named? ────────────────────────┐
 │ UserController                                               │
 └──────────────────────────────────────────────────────────────┘

 ┌ Which type of controller would you like? ────────────────────┐
 │ › ● Empty                                                    │
 │   ○ Resource                                                 │
 │   ○ Singleton                                                │
 │   ○ API                                                      │
 │   ○ Invokable                                                │
 └──────────────────────────────────────────────────────────────┘

Output setelah kita tuliskan nama Controller, terdapat pilihan tipe controller, lalu terdapat model yang bisa kita gunakan di controller yang akan kita buat.

php artisan make:controller

 ┌ What should the controller be named? ────────────────────────┐
 │ UserController                                               │
 └──────────────────────────────────────────────────────────────┘

 ┌ Which type of controller would you like? ────────────────────┐
 │ Resource                                                     │
 └──────────────────────────────────────────────────────────────┘

 ┌ What model should this resource controller be for? (Optional) ┐
 │ User                                                          │
 └───────────────────────────────────────────────────────────────┘

   INFO  Controller [app/Http/Controllers/UserController.php] created successfully.  

Sekarang kita coba mulai project untuk membuat custom command menggunakan laravel prompt.

Overview

Pada tutorial kali ini kita akan membuat custom artisan command laravel untuk menambahkan user baru, yaitu make:user. Ketika command ini kita run, nanti kita akan diminta untuk memasukan nama, email dan password. Setelah kita input name, email dan password, user baru akan ditambahkan ke database.

Step 1 - Buat Project Baru

Sekarang kita buat project baru menggunakan composer. Buka terminal lalu run command di bawah ini.

composer create-project laravel/laravel:^10.0 custom_command_laravel

Step 2 - Set Konfigurasi Database

Setelah project baru berhasil kita buat di langkah sebelumnya, sekarang kita atur konfigurasi database. Buka file .env di text editor, lalu sesuaikan credentials mysql dan database yang akan kita gunakan untuk project kali ini.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db_custom_command
DB_USERNAME=admin
DB_PASSWORD=password

Selanjutnya jangan lupa buat database baru dengan nama db_custom_command (atau sesuai dengan nama database yang kamu atur di file .env).

Setelah database kita buat, selanjutnya kita run migration file yang sudah tersedia secara default menggunakan command di bawah ini.

php artisan migrate

Step 3 - Install Laravel Prompt

Langkah selanjutnya adalah install package laravel prompt melalui composer.

composer require laravel/prompts

Tunggu sampai proses install melalui composer selesai. Setelah

Step 4 - Buat Command baru make:user

Sekarang kita generate command baru melalui artisan command di bawah ini.

php artisan make:command MakeUser

Output ketika command di atas kita run.

$ php artisan make:command MakeUser

   INFO  Console command [app/Console/Commands/MakeUser.php] created successfully.  

Selanjutnya kita buka file app/Console/Commands/MakeUser.php dan kita sesuaikan dengan baris kode berikut ini.

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

use App\Models\User;
use function Laravel\Prompts\text;
use Illuminate\Support\Facades\Hash;

class MakeUser extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'make:user {name?} {email?} {password?}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Create user for application';

    /**
     * Execute the console command.
     */
    public function handle()
    {
        $name = $this->argument('name') ?: text('What is your name?');
        $email = $this->argument('email') ?: text('What is your email?');
        $password = $this->argument('password')?: text('What is your password?');

        $user = User::create([
            'name' => $name,
            'email' => $email,
            'password' => Hash::make($password)
        ]);

        $this->info("User {$user->name} created successfully");
    }
}

Penjelasan Kode:

  1. use Illuminate\Console\Command;: Baris kode ini digunakan untuk mengimpor kelas Command dari namespace Illuminate\Console. Kelas Command digunakan sebagai dasar untuk membuat perintah dalam Laravel.

  2. use App\Models\User;: Baris kode ini digunakan untuk mengimpor kelas User dari namespace App\Models. Kelas User mewakili model pengguna dalam aplikasi Laravel.

  3. use function Laravel\Prompts\text;: Baris kode ini digunakan untuk mengimpor fungsi text() dari namespace Laravel\Prompts. Fungsi ini digunakan untuk meminta input teks dari pengguna melalui terminal.

  4. use Illuminate\Support\Facades\Hash;: Ini mengimpor kelas Hash dari namespace Illuminate\Support\Facades. Kelas Hash digunakan untuk mengenkripsi kata sandi.

  5. class MakeUser extends Command: Ini mendefinisikan kelas MakeUser yang mengextend kelas Command, artinya kelas ini adalah turunan dari kelas Command.

  6. $signature = 'make:user {name?} {email?} {password?}';: Ini mendefinisikan tanda tangan perintah. Ketika kita menjalankan perintah ini dari terminal, kita dapat memberikan tiga argumen opsional: nama, email, dan password.

  7. $description = 'Create user for application';: Ini mendefinisikan deskripsi dari perintah, yang akan muncul saat kita menjalankan perintah php artisan list.

  8. public function handle(): Ini mendefinisikan metode handle() yang akan dijalankan ketika perintah ini dipanggil.

  9. Di dalam metode handle(), kode mengambil input dari pengguna menggunakan text() untuk nama, email, dan password. Jika argumen tidak diberikan, pengguna akan diminta untuk memasukkan nilai melalui terminal.

  10. Selanjutnya, kelas User digunakan untuk membuat pengguna baru dengan menggunakan nilai-nilai yang diambil dari input pengguna. Kata sandi juga di-hash menggunakan kelas Hash sebelum disimpan dalam basis data.

  11. $this->info("User {$user->name} created successfully");: Ini menampilkan pesan notifikasi di terminal setelah pengguna berhasil dibuat.

Step 5 - Uji Coba

Sekarang kita coba run custom command yang baru saja kita buat. Buka kembali terminal lalu kita run command-nya.

php artisan make:user

Output ketika command berhasil dirun.

php artisan make:user

 ┌ What is your name? ──────────────────────────────────────────┐
 │                                                              │
 └──────────────────────────────────────────────────────────────┘

Kita coba isi dengan admin, lalu enter.

php artisan make:user

 ┌ What is your name? ──────────────────────────────────────────┐
 │ admin                                                        │
 └──────────────────────────────────────────────────────────────┘

 ┌ What is your email? ─────────────────────────────────────────┐
 │                                                              │
 └──────────────────────────────────────────────────────────────┘

Kita coba isi email dengan [email protected], lalu tekan enter kembali. Lalu yang terakhir kita isi password.

php artisan make:user            

 ┌ What is your name? ──────────────────────────────────────────┐
 │ admin                                                        │
 └──────────────────────────────────────────────────────────────┘

 ┌ What is your email? ─────────────────────────────────────────┐
 │ [email protected]                                            │
 └──────────────────────────────────────────────────────────────┘

 ┌ What is your password? ──────────────────────────────────────┐
 │ password                                                     │
 └──────────────────────────────────────────────────────────────┘

User admin created successfully

Ketika kita cek database, terdapat user baru yang berhasil ditambahkan di table users.

Penutup

Fitur untuk membuat custom command ini sudah tersedia sebelum adanya laravel prompt. Setelah kita coba buat custom command menggunakan laravel prompt, command yang dihasilkan tampak lebih interaktif dan menarik.

Gun Gun Priatna
Software Engineer, Content Writer and Founder qadrlabs.com
Komentar

blog comments powered by Disqus