Lors de la création d'outils de ligne de commande dans Laravel, l'un des défis courants est de gérer gracieusement les entrées utilisateur manquantes ou incorrectes. Le trait d'invite de Laravel en adressé en transformant les commandes d'artisan standard en dialogues interactifs.
plutôt que d'échouer quand les arguments sont manquants, vos commandes peuvent engager les utilisateurs avec des invites utiles, en les guidant à travers les entrées requises. Cette approche est particulièrement précieuse pour les tâches de maintenance complexes, les scripts de déploiement ou toute situation où vous devez assurer une entrée de ligne de commande précise tout en maintenant une interface professionnelle et conviviale.
<!-- Syntax highlighted by torchlight.dev -->use Illuminate\Console\Command; use Illuminate\Contracts\Console\PromptsForMissingInput; class PublishContent extends Command implements PromptsForMissingInput { protected $signature = 'content:publish {type} {status}'; protected function promptForMissingArgumentsUsing(): array { return [ 'type' => 'What type of content are you publishing?', 'status' => 'Should this be published as draft or live?' ]; } }
Explorons un exemple pratique d'une commande de sauvegarde de base de données avec des invites interactives:
<!-- Syntax highlighted by torchlight.dev --><?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... } }
L'interface inviteformissingInput transforme les interactions de ligne de commande en dialogues conviviaux, ce qui rend vos commandes artisanales plus intuitives et plus faciles à utiliser.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!