وقتی که توی لاراول نیاز باشه یه command توی ترمینال بسازی همیشه یکی از چالش برانگیز ترین قسمتها مدیریت پارامتر های اشتباه یا ارسال نشده هست.
📩 با عضویت در خبرنامه، جدیدترین مطالب و آموزشها را مستقیم در ایمیل خود دریافت کنید.
لاراول یه trait معرفی کرده به اسم PromptsForMissingInput که command شما رو تعامل پذیر میکنه فقط کافیه از این کلاس استفاده کنید.
قرار نیست که این trait رو توی کد use کنید باید مثل یه interface باهاش رفتار کنید مثل این زیر.
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Contracts\Console\PromptsForMissingInput;
class BackupDatabase extends Command implements PromptsForMissingInput
{
protected $signature = 'db:backup
{connection? : Database connection to backup}
{--tables=* : Specific tables to backup}
{--compress : Compress the backup file}';
protected $description = 'Create a database backup';
protected function promptForMissingArgumentsUsing(): array
{
return [
'connection' => fn () => choice(
'Which database connection should be backed up?',
[
'mysql' => 'MySQL Primary Database',
'sqlite' => 'SQLite Testing Database',
'pgsql' => 'PostgreSQL Analytics Database'
],
'mysql'
),
'--tables' => fn () => multiChoice(
'Select tables to backup (leave empty for all):',
$this->getAvailableTables()
),
'--compress' => fn () => confirm(
'Would you like to compress the backup?',
true
)
];
}
private function getAvailableTables(): array
{
// Fetch tables from database
return ['users', 'posts', 'comments', 'orders'];
}
public function handle()
{
$connection = $this->argument('connection');
$tables = $this->option('tables');
$compress = $this->option('compress');
$this->info("Starting backup of {$connection} database...");
// Backup logic here...
}
}
Code language: HTML, XML (xml)
به همین راحتی میتونید دیتاهای ورودی command رو validate کنید و مطمئن باشید که همه چی درست پیش میره!!

