- Pengantar
- Menulis Perintah
- Menentukan Input yang Diharapkan
- I/O Perintah
- Mendaftarkan Perintah
- Mengeksekusi Perintah Secara Terprogram
- Penanganan Sinyal
- Kostumisasi Stub
- Event
Artisan merupakan command line interface—antarmuka dalam bentuk baris perintah— (CLI) yang terdapat pada Laravel. Artisan terdapat pada root aplikasi Anda sebagai skrip artisan
yang menyediakan beberapa perintah yang dapat membantu Anda untuk membangun aplikasi. Untuk melihat daftar perintah yang terdapat pada Artisan, Anda dapat menggunakan perintah list
:
php artisan list
Setiap perintah memiliki sebuah layar "help" (bantuan) yang menampilkan dan menjelaskan argumen dan opsi yang tersedia pada perintah tersebut. Untuk melihat layar bantuan, gunakan perintah help
diikuti dengan nama perintah yang ingin dilihat:
php artisan help migrate
Jika Anda menggunakan Laravel Sail sebagai lingkungan development pada lokal, jangan lupa untuk menggunakan perintah sail
untuk melakukan perintah Artisan. Sail akan mengeksekusi perintah Artisan Anda pada kontainer Docker:
./vendor/bin/sail artisan list
Laravel Tinker merupakan sebuah REPL yang powerful untuk framework Laravel, ditenagai oleh package PsySH.
Semua aplikasi Laravel secara default telah memiliki Tinker. Namun, Anda dapat memasang Tinker menggunakan Composer jika Tinker telah terhapus dari aplikasi Anda.
composer require laravel/tinker
Catatan
Mencari UI grafis untuk berinteraksi dengan aplikasi Laravel Anda? Lihatlah Tinkerwell!
Tinker memungkinkan Anda untuk berinteraksi dengan aplikasi Anda secara keseluruhan menggunakan baris perintah, termasuk model Eloquent, jobs, events, dan lainnya. Untuk memasuki lingkungan Tinker, jalankan perintah Artisan tinker
:
php artisan tinker
Anda dapat menerbitkan file konfigurasi Tinker menggunakan perintah vendor:publish
:
php artisan vendor:publish --provider="Laravel\Tinker\TinkerServiceProvider"
Peringatan
Fungsidispatch
pada helper dan metodedispatch
pada kelasDispatchable
bergantung pada garbage collection untuk menempatkan job pada queue. Karena itu, ketika menggunakan Tinker, Anda harus menggunakanBus::dispatch
atauQueue::push
untuk mengirimkan (dispatch) job.
Tinker dilengkapi dengan sebuah daftar "allow" untuk menentukan perintah Artisan mana yang diizinkan untuk dijalankan pada shell. secara default, Anda dapat menjalankan perintah clear-compiled
, down
, env
, inspire
, migrate
, optimize
, dan up
. Jika ingin menjalankan perintah-perintah lain, Anda bisa menambahkannya pada array commands
pada file konfigurasi tinker.php
:
'commands' => [
// App\Console\Commands\ExampleCommand::class,
],
Biasanya, Tinker secara otomatis membuat alias terhadap kelas-kelas saat Anda berinteraksi dengan kelas-kelas tersebut. Namun, Anda mungkin mengharapkan beberapa kelas untuk tidak diberi alias. Anda dapat mewujudkan hal ini dengan mendaftarkan kelas-kelas tersebut ke dalam array dont_alias
pada file konfigurasi tinker.php
Anda:
'dont_alias' => [
App\Models\User::class,
],
Untuk menambah perintah yang disediakan oleh Artisan, Anda dapat membuat perintah kustom Anda sendiri. Perintah-perintah tersebut biasanya disimpan pada direktori app/Console/Commands
; bagaimanapun, Anda bebas untuk memilih lokasi penyimpanan perintah Anda selama dapat dimuat oleh Composer.
Untuk membuat perintah (command) yang baru, Anda dapat menggunakan perintah Artisan make:command
. Perintah ini akan membuat kelas command yang baru pada direktori app/Console/Commands
. Jangan khawatir jika direktori ini belum ada pada aplikasi Anda - direktori secara otomatis akan muncul ketika menjalankan perintah Artisan make:command
untuk pertama kali:
php artisan make:command SendEmails
Setelah membuat perintah baru, Anda harus mendefinisikan nilai-nilai yang sesuai untuk properti signature
dan description
pada kelas tersebut. properti-properti ini akan digunakan ketika perintah baru Anda ditampilkan pada daftar perintah (output list
). Properti signature
juga memungkinkan Anda untuk mmendefinisikan input yang diharapkan perintah. Metode handle
akan dipanggil ketika perintah Anda dieksekusi. Anda dapat menempatkan logika Anda pada metode ini.
Mari kita lihat sebuah contoh perintah. Perlu diingat bahwa kita dapat memasukkan dependensi-dependensi apa saja yang dibutuhkan melalui metode handle
milik command. service container milik Laravel akan melakukan injeksi semua dependensi secara otomatis yang telah di-type hint di dalam signature milik metode tersebut:
<?php
namespace App\Console\Commands;
use App\Models\User;
use App\Support\DripEmailer;
use Illuminate\Console\Command;
class SendEmails extends Command
{
/**
* Nama dan signature dari perintah console.
*
* @var string
*/
protected $signature = 'mail:send {user}';
/**
* Deskripsi perintah konsol.
*
* @var string
*/
protected $description = 'Send a marketing email to a user';
/**
* Eksekusi perintah console.
*
* @param \App\Support\DripEmailer $drip
* @return mixed
*/
public function handle(DripEmailer $drip)
{
$drip->send(User::find($this->argument('user')));
}
}
Catatan
Untuk penggunaan kembali kode (reuse code) yang lebih baik, praktik yang baik adalah menjaga perintah konsol tetap ringan dan membiarkan service aplikasi yang menyelesaikan tugas berat tersebut. Pada contoh diatas, perlu diingat kita memasukkan sebuah kelas service untuk melakukan "angkat beban" dalam pengiriman e-mail.
Perintah berbasis closure menyediakan sebuah alternatif untuk mendefinisikan perintah konsol sebagai sebuah kelas. Hal ini mirip seperi rute closure sebagai alternatif untuk controller, bayangkan sebuah perintah closure sebagai alternatif dari kelas command. Dengan metode commands
pada file app/Console/Kernel.php
Anda, Laravel akan memuat file routes/console.php
:
/**
* Mendaftarkan perintah berbasis closure untuk aplikasi.
*
* @return void
*/
protected function commands()
{
require base_path('routes/console.php');
}
Meskipun file ini tidak mendefinisikan rute HTTP, file ini mendefinisikan rute entry points berbasis komsol ke dalam aplikasi Anda. Dengan file ini, Anda dapat mendefinisikan semua perintah konsol berbasis closure menggunakan metode Artisan::command
. Metode command
menerima dua argumen: signature perintah dan sebuah closure yang menerima argumen dan opsi dari perintah:
Artisan::command('mail:send {user}', function ($user) {
$this->info("Mengirim email ke: {$user}!");
});
Closure terikat pada instance perintah yang mendasarinya, sehingga Anda memiliki akses penuh ke semua metode helper yang biasanya dapat diakses pada kelas perintah biasa.
Selain menerima argumen dan opsi perintah, perintah closure juga dapat melakukan type-hint dependensi tambahan yang ingin Anda resolve dengan service container:
use App\Models\User;
use App\Support\DripEmailer;
Artisan::command('mail:send {user}', function (DripEmailer $drip, $user) {
$drip->send(User::find($user));
});
Saat menentukan perintah berbasis closure, Anda dapat menggunakan metode purpose
untuk menambahkan deskripsi untuk perintah. Deskripsi ini akan ditampilkan saat Anda menjalankan perintah php artisan list
atau php artisan help
:
Artisan::command('mail:send {user}', function ($user) {
// ...
})->purpose('Mengirim email marketing ke pengguna');
Peringatan Untuk menggunakan fitur ini, aplikasi Anda harus menggunakan driver cache
memcached
,redis
,dynamodb
,database
,file
, atauarray
sebagai driver cache default aplikasi Anda. Selain itu, semua server harus berkomunikasi dengan server cache pusat yang sama.
Terkadang Anda mungkin ingin memastikan bahwa hanya ada satu instance perintah yang dapat dijalankan pada suatu waktu. Untuk mencapai hal tersebut, Anda dapat mengimplementasikan interface Illuminate\Contracts\console\Isolatable
pada kelas perintah tersebut:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Contracts\Console\Isolatable;
class SendEmails extends Command implements Isolatable
{
// ...
}
Ketika perintah ditandai sebagai Isolatable
, Laravel secara otomatis akan menambahkan opsi --isolated
ke perintah tersebut. Ketika perintah dipanggil dengan opsi tersebut, Laravel akan memastikan bahwa tidak ada instance lain dari perintah tersebut yang sedang berjalan. Laravel mewujudkan ini dengan mencoba untuk memperoleh lock atomic mmenggunakan driver cache default aplikasi Anda. Jika ada instance lain dari perintah yang sedang berjalan, perintah tidak akan dieksekusi; namun, perintah akan tetap berhenti dengan kode status keluar yang sukses:
php artisan mail:send 1 --isolated
Jika Anda ingin menentukan kode status keluar yang harus dikembalikan oleh perintah jika tidak dapat dieksekusi, Anda dapat memberikan kode status yang diinginkan melalui opsi isolated
:
php artisan mail:send 1 --isolated=12
Secara default, penguncian isolasi akan kadaluarsa setelah perintah selesai. Atau, jika perintah diinterupsi atau tidak dapat terselesaikan, penguncian akan kadaluarsa setelah satu jam. Namun, Anda dapat menyesuaikan waktu kadaluarsa untuk penguncian dengan mendefinisikan sebuah metode isolationLockExpiresAt
pada perintah Anda:
/**
* menentukan kapan kunci isolasi kadaluarsa pada perintah.
*
* @return \DateTimeInterface|\DateInterval
*/
public function isolationLockExpiresAt()
{
return now()->addMinutes(5);
}
Saat menulis perintah konsol, umumnya Anda mengumpulkan input dari pengguna melalui argumen atau opsi. Laravel mempermudah Anda dalam menentukan input yang diharapkan dari pengguna menggunakan properti signature
pada perintah Anda. Properti signature
memungkinkan Anda untuk menentukan nama, argumen, dan opsi untuk perintah dalam satu sintaks yang ekspresif, seperti route.
Semua argumen dan opsi yang disediakan pengguna dibungkus dalam tanda kurung kurawal. Dalam contoh berikut, suatu perintah didefinisikan dengan satu argumen yang diperlukan: user
:
/**
* Nama dan signature dari perintah console.
*
* @var string
*/
protected $signature = 'mail:send {user}';
Anda juga dapat membuat argumen tersebut menjadi opsional atau menentukan nilai default-nya:
// Argumen opsional...
'mail:send {user?}'
// Argumen opsional dengan nilai default...
'mail:send {user=foo}'
Opsi seperti argumen, merupakan bentuk lain dari input pengguna. Opsi diawali dengan dua tanda hubung (--
) saat dituliskan dalam baris perintah. Ada dua jenis opsi: yang menerima nilai dan yang tidak. Opsi yang tidak menerima nilai berfungsi sebagai "switch" boolean. Mari kita lihat contoh opsi jenis ini:
/**
* Nama dan signature dari perintah console.
*
* @var string
*/
protected $signature = 'mail:send {user} {--queue}';
Pada contoh ini, switch --queue
dapat ditambahkan saat memanggil perintah Artisan. Jika switch --queue
diberikan, nilai opsi akan menjadi true
. Jika tidak, nilai akan menjadi false
:
php artisan mail:send 1 --queue
Selanjutnya, marilah kita lihat opsi yang dapat diisi nilai. Jika pengguna harus memasukkan nilai untuk opsi, Anda harus menambahkan tanda =
pada nama opsi:
/**
* Nama dan signature dari perintah console.
*
* @var string
*/
protected $signature = 'mail:send {user} {--queue=}';
Dalam contoh ini, pengguna dapat mengirimkan nilai untuk opsi seperti ini. Jika opsi tidak ditentukan saat menjalankan perintah, nilainya akan menjadi null
:
php artisan mail:send 1 --queue=default
Anda dapat memberikan nilai default ke opsi dengan menentukan nilai default setelah nama opsi. Jika tidak ada nilai opsi yang diberikan oleh pengguna, nilai default akan digunakan:
'mail:send {user} {--queue=default}'
Untuk memberikan pintasan saat menentukan opsi, Anda dapat menentukannya sebelum nama opsi dan menggunakan karakter |
sebagai pembatas untuk memisahkan antara pintasan dan nama lengkap untuk opsi:
'mail:send {user} {--Q|queue}'
Saat menjalankan perintah di terminal Anda, pintasan opsi harus diawali dengan tanda hubung tunggal:
php artisan mail:send 1 -Q
Jika Anda ingin menentukan argumen atau opsi yang mengharapkan beberapa nilai input, Anda dapat menggunakan karakter *
. Mari kita lihat contohnya:
'mail:send {user*}'
Saat memanggil metode ini, argumen user
dapat diberikan ke baris perintah. Misalnya, perintah berikut akan mengatur nilai user
menjadi sebuah array dengan nilai 1
dan 2
:
php artisan mail:send 1 2
Karakter *
ini dapat digabungkan dengan definisi argumen opsional untuk mengijinkan instance argumen menjadi nol atau lebih:
'mail:send {user?*}'
Saat menentukan opsi yang mengharapkan beberapa nilai input, setiap nilai opsi yang diberikan ke perintah harus diawali dengan nama opsi:
'mail:send {--id=*}'
Perintah seperti itu dapat dijalankan dengan mengirimkan beberapa argumen --id
:
php artisan mail:send --id=1 --id=2
Anda dapat memberikan deskripsi ke argumen dan opsi dengan memisahkan nama argumen dari deskripsi menggunakan tanda titik dua. Jika Anda membutuhkan baris tambahan untuk mendefinisikan perintah, Anda dapat menulisnya dalam beberapa baris:
/**
* Nama dan signature dari perintah konsol.
*
* @var string
*/
protected $signature = 'mail:send
{user : ID dari pengguna}
{--queue : apakah job harus diantrikan}';
Saat perintah Anda sedang dieksekusi, Anda mungkin akan perlu mengakses nilai untuk argumen dan opsi yang diterima oleh perintah tersebut. Untuk melakukannya, Anda dapat menggunakan metode argument
dan option
. Jika argumen atau opsi tidak ada, maka metode tersebut akan mengembalikan nilai null
:
/**
* Eksekusi perintah console.
*
* @return int
*/
public function handle()
{
$userId = $this->argument('user');
//
}
Jika Anda perlu mengambil semua argumen sebagai array
, gunakan metode arguments
:
$arguments = $this->arguments();
Opsi dapat dengan mudah diperoleh seperti argumen menggunakan metode option
. Untuk mengambil semua opsi sebagai array, panggil metode options
:
// Peroleh sebuah opsi...
$queueName = $this->option('queue');
// Peroleh semua opsi...
$options = $this->options();
Selain menampilkan output, Anda juga dapat meminta pengguna untuk memberikan input selama eksekusi perintah Anda. Metode ask
akan meminta jawaban pengguna dengan pertanyaan yang diberikan, kemudian mengembalikan input tersebut ke perintah Anda:
/**
* Eksekusi perintah console.
*
* @return mixed
*/
public function handle()
{
$name = $this->ask('Siapa nama Anda?');
}
Metode secret
mirip dengan metode ask
, namun input dari pengguna tidak akan terlihat ketika diketikan pada konsol. Metode ini sangat berguna ketika memasukkan informasi yang sensitif seperti kata sandi:
$password = $this->secret('Apa kata sandi Anda?');
Jika Anda membutuhkan konfirmasi sederhana "ya atau tidak" dari pengguna, Anda dapat menggunakan metode confirm
. Secara default, metode ini akan mengembalikan nilai false
. Namun, jika pengguna menjawab y
atau yes
maka metode tersebut akan mengembalikan nilai true
:
if ($this->confirm('Apa Anda ingin melanjutkan?')) {
//
}
Jika diperlukan, Anda dapat menentukan bahwa prompt konfirmasi harus mengembalikan true
secara default
dengan mengirimkan true
sebagai argumen kedua pada metode confirm
:
if ($this->confirm('Apakah Anda ingin melanjutkan?', true)) {
//
}
Metode anticipate
dapat digunakan untuk memberikan auto-completion pada pilihan yang ada. Pengguna masih dapat memasukkan jawabannya sendiri tanpa memperdulikan pilihan dari auto-completion:
$name = $this->anticipate('Siapa nama Anda?', ['Taylor', 'Dayle']);
Atau, Anda dapat mengirimkan closure sebagai argumen kedua ke metode anticipate
. Closure akan dipanggil setiap kali pengguna mengetik karakter input. Closure harus menerima parameter string yang berisi input pengguna sampai saat ini, dan mengembalikan array opsi untuk auto-completion:
$name = $this->anticipate('Di mana alamat Anda?', function ($input) {
// Mengembalikan opsi untuk auto-completion...
});
Jika Anda perlu memberikan pilihan yang telah ditentukan kepada pengguna saat bertanya, Anda dapat menggunakan metode choice
. Anda dapat menentukan indeks array
dari nilai default
yang akan dikembalikan jika tidak ada opsi yang dipilih dengan mengirimkan indeks sebagai argumen ketiga ke metode:
$name = $this->choice(
'Siapa nama Anda?',
['Taylor', 'Dayle'],
$defaultIndex
);
Selain itu, metode choice
menerima argumen keempat dan kelima yang opsional untuk menentukan jumlah maksimum percobaan untuk memilih tanggapan yang valid dan apakah pemilihan ganda diizinkan:
$name = $this->choice(
'Siapa nama Anda?',
['Taylor', 'Dayle'],
$defaultIndex,
$maxAttempts = null,
$allowMultipleSelections = false
);
Untuk mengirim output ke konsol, Anda dapat menggunakan metode line
, info
, comment
, question
, warn
, dan error
. Setiap metode ini akan menggunakan warna ANSI yang sesuai untuk tujuannya. Sebagai contoh, mari kita tampilkan beberapa informasi umum kepada pengguna. Biasanya, metode info
akan ditampilkan di konsol sebagai teks berwarna hijau:
/**
* Eksekusi perintah konsol.
*
* @return mixed
*/
public function handle()
{
// ...
$this->info('Perintah berjalan sukses!');
}
Untuk menampilkan pesan eror, gunakan metode error
. Pesan eror biasanya ditampilkan dalam warna merah:
$this->error('Terjadi kesalahan!');
Anda dapat menggunakan metode line
untuk menampilkan teks tanpa warna:
$this->line('Tampilkan ini di layar');
Anda dapat menggunakan metode newLine
untuk menampilkan baris kosong:
// Menampilkan satu baris kosong...
$this->newLine();
// Menampilkan tiga baris kosong...
$this->newLine(3);
Metode table
memudahkan pengaturan format yang baik untuk beberapa baris / kolom data. Yang perlu Anda lakukan hanyalah memberikan nama kolom dan data untuk tabel, dan Laravel akan secara otomatis menghitung lebar dan tinggi tabel yang sesuai untuk Anda:
use App\Models\User;
$this->table(
['Name', 'Email'],
User::all(['name', 'email'])->toArray()
);
Untuk tugas yang berlangsung lama, Anda dapat menampilkan bilah progres yang memberi tahu pengguna seberapa jauh tugas telah dilaksanakan. Dengan menggunakan metode withProgressBar
, Laravel akan menampilkan bilah progres dan menambah nilai progresnya untuk setiap iterasi atas nilai iterable yang diberikan:
use App\Models\User;
$users = $this->withProgressBar(User::all(), function ($user) {
$this->performTask($user);
});
Terkadang, Anda mungkin membutuhkan kontrol yang lebih manual untuk mengendalikan bilah progres. Pertama, tentukan jumlah langkah yang akan dilalui proses. Kemudian, naikkan bilah progres setelah memproses masing-masing item:
$users = App\Models\User::all();
$bar = $this->output->createProgressBar(count($users));
$bar->start();
foreach ($users as $user) {
$this->performTask($user);
$bar->advance();
}
$bar->finish();
Catatan
Untuk opsi tingkat lanjut, sila periksa Dokumentasi komponen Progress Bar milik Symfony.
Semua perintah konsol Anda terdaftar dalam kelas App\console\Kernel
, yang merupakan "console kernel" aplikasi Anda. Di dalam metode commands
, Anda akan melihat sebuah pemanggilan ke metode load
milik kernel. Metode load
akan memindai direktori app/console/Commands
dan secara otomatis mendaftarkan setiap perintah yang ditemukan ke Artisan. Anda bahkan bebas membuat panggilan tambahan ke metode load
untuk memindai direktori lain untuk perintah Artisan:
/**
* Mendaftarkan perintah untuk aplikasi.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__.'/Commands');
$this->load(__DIR__.'/../Domain/Orders/Commands');
// ...
}
Jika perlu, Anda dapat mendaftarkan perintah secara manual dengan menambahkan nama kelas dari perintah ke properti $commands
di dalam class App\console\Kernel
Anda. Jika properti ini belum didefinisikan pada kernel Anda, Anda harus mendefinisikannya secara manual. Saat Artisan melakukan boot, semua perintah yang terdaftar dalam properti ini akan di-resolve oleh container dan didaftarkan dengan Artisan:
protected $commands = [
Commands\SendEmails::class
];
Terkadang Anda mungkin ingin mengeksekusi perintah Artisan di luar CLI. Sebagai contoh, Anda mungkin ingin mengeksekusi perintah Artisan dari rute atau controller. Anda dapat menggunakan metode call
pada facade Artisan untuk mencapainya. Metode call
menerima nama signature atau nama kelas sebagai argumen pertamanya, dan sebuah array berisi parameter perintah sebagai argumen kedua. Kode keluar akan dikembalikan:
use Illuminate\Support\Facades\Artisan;
Route::post('/user/{user}/mail', function ($user) {
$exitCode = Artisan::call('mail:send', [
'user' => $user, '--queue' => 'default'
]);
//
});
Atau, Anda dapat mengirimkan perintah Artisan seluruhnya ke metode call
dalam bentuk string:
Artisan::call('mail:send 1 --queue=default');
Jika perintah Anda mendefinisikan sebuah opsi yang menerima array, Anda dapat mengirimkan sebuah array ke opsi tersebut:
use Illuminate\Support\Facades\Artisan;
Route::post('/mail', function () {
$exitCode = Artisan::call('mail:send', [
'--id' => [5, 13]
]);
});
Jika Anda perlu menentukan nilai dari sebuah opsi yang tidak menerima nilai string, seperti (flag) --force
pada perintah migrate:refresh
, Anda harus mengirimkan true
atau false
sebagai nilai opsi tersebut:
$exitCode = Artisan::call('migrate:refresh', [
'--force' => true,
]);
Dengan menggunakan metode queue
pada facade Artisan
, Anda bahkan dapat mengelola perintah Artisan sehingga dapat diproses di latar belakang oleh pekerja queue. Sebelum menggunakan metode ini, pastikan Anda telah mengkonfigurasi antrian dan menjalankan queue listener:
use Illuminate\Support\Facades\Artisan;
Route::post('/user/{user}/mail', function ($user) {
Artisan::queue('mail:send', [
'user' => $user, '--queue' => 'default'
]);
//
});
Dengan menggunakan metode onConnection
dan onQueue
, Anda dapat menentukan koneksi atau antrian perintah Artisan yang harus dikirimkan:
Artisan::queue('mail:send', [
'user' => 1, '--queue' => 'default'
])->onConnection('redis')->onQueue('commands');
Terkadang Anda mungkin ingin memanggil perintah lain dari perintah Artisan yang ada. Anda dapat melakukannya dengan menggunakan metode call
. Metode call
ini menerima nama perintah dan sebuah array untuk argumen / opsi:
/** * Eksekusi perintah console. * * @return mixed */ public function handle() { $this->call('mail:send', [ 'user' => 1, '--queue' => 'default' ]);
//
}
Jika Anda ingin memanggil perintah konsol lain dan tidak ingin menampilkan output dari perintah tersebut, Anda dapat menggunakan metode callSilently
. Metode callSilently
memiliki signature yang sama dengan metode call
:
$this->callSilently('mail:send', [
'user' => 1, '--queue' => 'default'
]);
Seperti yang Anda tahu, sistem operasi memungkinkan sinyal dikirim ke proses yang sedang berjalan. Misalnya, sinyal SIGTERM
adalah bagaimana sistem operasi meminta sebuah program untuk dihentikan. Jika Anda ingin mendengarkan sinyal dalam perintah konsol Artisan Anda dan menjalankan kode saat sinyal terjadi, Anda dapat menggunakan metode trap
:
/**
* Eksekusi perintah console.
*
* @return mixed
*/
public function handle()
{
$this->trap(SIGTERM, fn () => $this->shouldKeepRunning = false);
while ($this->shouldKeepRunning) {
// ...
}
}
Untuk mendengarkan beberapa sinyal sekaligus, Anda dapat menggunakan array berisi sinyal-sinyal ke dalam metode trap
:
$this->trap([SIGTERM, SIGQUIT], function ($signal) {
$this->shouldKeepRunning = false;
dump($signal); // SIGTERM / SIGQUIT
});
Perintah make
pada konsol Artisan digunakan untuk membuat berbagai macam kelas, seperti controller, job, migration, dan test. Kelas-kelas ini dibuat menggunakan file "stub" yang diisi berdasarkan nilai-nilai yang di-input-kan. Namun, Anda mungkin ingin membuat perubahan kecil pada file yang dihasilkan oleh Artisan. Untuk mencapai ini, Anda dapat menggunakan perintah stub:publish
untuk mempublikasikan stub ke aplikasi Anda sehingga Anda dapat mengubahnya untuk disesuikan:
php artisan stub:publish
Stub yang dipublis akan terletak di dalam direktori stubs
pada root aplikasi Anda. Segala perubahan yang Anda lakukan pada stub tersebut akan langsung tercermin saat Anda menghasilkan kelas menggunakan perintah make
milik Artisan.
Artisan mengirimkan tiga event saat menjalankan perintah: Illuminate\console\Events\ArtisanStarting
, Illuminate\console\Events\CommandStarting
, dan Illuminate\console\Events\CommandFinished
. Event ArtisanStarting
dikirimkan segera saat Artisan mulai berjalan. Kemudian, event CommandStarting
dikirimkan segera sebelum sebuah perintah dijalankan. Terakhir, event CommandFinished
dikirimkan setelah sebuah perintah selesai dieksekusi.