[silindi] Artisan komutunu closure dediğimiz anonim yoldan tanımlamanızı sağlıyor. Bu tanımları routes/console.php içerisinde yapıyorsunuz. Mesela routes/console.php içerisine girerseniz bir tane örnek görürsünüz:
Artisan::command('inspire', function () {
$this->comment(Inspiring::quote());
})->describe('Display an inspiring quote');
Bunu normal yolla yapmak isteseydik şöyle olacaktı:
app/Console/Commands/Inspire.php:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Foundation\Inspiring;
class Inspire extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'inspire';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Display an inspiring quote';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
$this->comment(Inspiring::quote());
}
}
Bu ikisi de aynı işi yapıyor. Tavsiyem console komutu oluşturarak yapmanız, closure kullanmanın pek bir anlamı yok. Closure kullanmak için tek mantıklı açıklama sanırım başka bir komutu farklı bir parametre ile çağıran bir komut yazmak olurdu ki bunu da komut içinde option ya da input ile halledebilirsiniz.
Ayrıca closure kullandığınızda sınıf adı ile kullanımdan da mahrum kalıyorsunuz. Örneğin anonim olanı şöyle kullanamazsınız:
$schedule->command(Inspire::class)->daily();