laravelartisancliMahir3 mnt baca
Artisan Command Kustom
Buat perintah CLI sendiri dengan signature, argumen, opsi, dan jadwalkan otomatis.
Membuat command
Banyak tugas tidak butuh browser: impor CSV, bersihkan data lama, kirim laporan harian. Bungkus jadi Artisan command:
bash
php artisan make:command KirimLaporanHarianphp
// app/Console/Commands/KirimLaporanHarian.php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class KirimLaporanHarian extends Command
{
protected $signature = 'laporan:harian {--tanggal=} {--kirim}';
protected $description = 'Kirim laporan harian ke admin';
public function handle(): int
{
$tanggal = $this->option('tanggal') ?? now()->toDateString();
$this->info("Membuat laporan untuk {$tanggal}...");
$total = \App\Models\Post::whereDate('created_at', $tanggal)->count();
if ($this->option('kirim')) {
// kirim email di sini
$this->info("Laporan dikirim: {$total} post.");
} else {
$this->warn('Mode dry-run, tidak dikirim. Tambahkan --kirim.');
}
return self::SUCCESS;
}
}Jalankan: php artisan laporan:harian --tanggal=2024-01-01 --kirim.
Interaksi dengan user
php
$nama = $this->ask('Siapa nama admin?');
$setuju = $this->confirm('Lanjut kirim laporan?');
$this->table(['Kolom', 'Jumlah'], [['Post', 10], ['User', 5]]);
$this->error('Gagal!'); $this->info('OK'); $this->warn('Hati-hati');Progress bar untuk proses panjang:
php
$bar = $this->output->createProgressBar(count($users));
foreach ($users as $user) {
// proses...
$bar->advance();
}
$bar->finish();Penjadwalan otomatis
Di Laravel 11, jadwal ditulis di routes/console.php (bukan Kernel lagi):
php
// routes/console.php
use Illuminate\Support\Facades\Schedule;
Schedule::command('laporan:harian --kirim')->dailyAt('07:00');
Schedule::command('queue:prune-failed --hours=48')->daily();Lalu di server, daftarkan SATU cron yang menjalankan scheduler tiap menit:
bash
* * * * * cd /path/to/blogku && php artisan schedule:run >> /dev/null 2>&1Catatan teknis:
schedule:runhanya mengeksekusi jadwal yang waktunya tiba. Kalau cron server tidak dipasang, jadwal tidak akan pernah jalan walau kodenya benar. Selalu verifikasi denganphp artisan schedule:listdan cek log cron setelah deploy.