Saat bekerja dengan framework Laravel, tentunya kita tidak asing dengan perintah php artisan. Tanpa adanya perintah ini bekerja dengan Laravel tidak akan semudah sekarang. Jika anda belum tahu, kita bisa menambah perintah buatan kita sendiri kedalam perintah artisan ini. Bagi anda yang suka bekerja secara otomatis dan suka bekerja dengan command line, menambah perintah artisan saya rasa bisa meningkatkan produktivitas anda.
Untuk menambah perintah artisan gunakan perintah ini di command line
php artisan make:command file_name
Argument file_name ini bebas asal sesuai dengan penamaan class di php, nantinya argument file_name ini akan dijadikan laravel sebagai dasar pembuatan file dan class. Misal jika saya mengetikkan perintah dibawah ini
php artisan make:command CreateUserCommand
Maka Laravel akan membuat file dengan nama CreateUserCommand.php di folder app/Console/Commands dengan isi sebagai berikut
namespace App\Console\Commands; use Illuminate\Console\Command; class CreateUserCommand extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'command:name'; /** * The console command description. * * @var string */ protected $description = 'Command description'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { // } }
Tambahkan command yang bisa dipanggil lewat perintah artisan di property $signature. Misal jika kita isi seperti dibawah ini
protected $signature = 'create:user';
Pada command line nantinya kita bisa memanggil perintah artisan dengan cara seperti ini
php artisan create:user
Selanjutnya isi property $description. Isi bebas mengenai kegunaan perintah ini, misal seperti ini
protected $description = 'Create Random User';
Selanjunya pastikan perintah create:user yang baru saja kita buat sudah terdaftar dengan mengetikkan perintah
php artisan list
Dari gambar di atas terlihat bahwa perintah create:user yang baru saja kita buat sudah terdaftar.
Saat perintah di panggil lewat perintah artisan laravel akan mengeksekusi method handle(). Oleh karena itu tempatkan logic perintah anda di method ini. Sebagai contoh kita tampilkan pesan sederhana saja, seperti dibawah ini
public function handle() { $this->info('You call create:user command'); }
Selanjutnya kita test dengan menjalankan perintah seperti digambar ini
Kita juga bisa menambahkan positional argumen pada perintah yang kita buat seperti dibawah ini
protected $signature = ' create:user {first_argument} {second_argument} ';
Positional argument adalah argument yang dibaca berdasarkan posisi argument itu diketik di console. Biasanya positional argument di pisahkan dengan spasi.
Untuk mendapatkan argument yang diketik user gunakan kode seperti dibawah ini
public function handle() { $first_argument = $this->argument('first_argument'); $second_argument = $this->argument('second_argument'); $this->info(" You call create:user command \n with First Argument : {$first_argument} and Second Argument : {$second_argument} "); }
Saat kita mengetikkan perintah seperti ini
php artisan create:user Ngasturi Surabaya
Kata Ngasturi karena ditulis pertama kali akan dibaca sebagai first argument. Jika argument mengandung spasi bungkus argument tersebut dalam single atau double quote, seperti dibawah ini
php artisan create:user Ngasturi 'Jalan Ahamad Yani 12 Surabaya'
Di console akan tampil seperti pada gambar dibawah ini
Positional argument juga bisa memiliki nilai default seperti ini
protected $signature = ' create:user {first_argument} {second_argument=Jakarta} ';
Sehingga jika kita tidak mengisi second_argument secara otomatis nilainya akan diisi Jakarta.
Selain argument kita juga bisa menggunakan keyword option seperti dibawah ini
protected $signature = ' create:user {first_argument} {second_argument=Jakarta} {--first_option=} {--second_option=} ';
Berbeda dengan argument, penulisan option bebas tidak harus sesuai dengan urutan posisinya, tapi harus ditulis setelah positional argument selesai ditulis semua, seperti pada gambar dibawah ini
Untuk mendapatkan option yang diketik user kita bisa menggunakan perintah seperti dibawah ini
public function handle() { $first_argument = $this->argument('first_argument'); $second_argument = $this->argument('second_argument'); $first_option = $this->option('first_option'); $second_option = $this->option('second_option'); $this->info(" You call create:user command \n with First Argument : {$first_argument} and Second Argument : {$second_argument} with First Option : {$first_option} and Second Option : {$second_option} "); }
Berikut ini adalah contoh lengkap perintah artisan untuk membuat random user.
namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\Hash; use App\User; class CreateUserCommand extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = ' create:user {--name=} {--email=} {--password=} '; /** * The console command description. * * @var string */ protected $description = 'Create Random User'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { $name = empty($this->option('name')) ? $this->generateRandomString() : $this->option('name'); $email = empty($this->option('email')) ? $this->generateRandomString() . '@' . $this->generateRandomString() . '.com' : $this->option('email'); $password = empty($this->option('password')) ? $this->generateRandomString(8) : $this->option('password'); User::create([ 'name' => $name, 'email' => $email, 'password' => Hash::make($password), ]); $this->info(" Successfully create new User with this credential \n Name : {$name} Email : {$email} Password : {$password} "); } private function generateRandomString($length = 4) { return substr(str_shuffle(str_repeat($x='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($length/strlen($x)) )),1,$length); } }
Sedangkan cara penggunaannya bisa dilihat dari beberapa gambar dibawah ini