Maison > développement back-end > tutoriel php > Commandes de console interactive dans Laravel

Commandes de console interactive dans Laravel

百草
Libérer: 2025-03-06 01:06:11
original
397 Les gens l'ont consulté

Interactive Console Commands in Laravel

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?'
        ];
    }
}
Copier après la connexion

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 = &#39;db:backup
        {connection? : Database connection to backup}
        {--tables=* : Specific tables to backup}
        {--compress : Compress the backup file}&#39;;
    protected $description = &#39;Create a database backup&#39;;

    protected function promptForMissingArgumentsUsing(): array
    {
        return [
            &#39;connection&#39; => 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...
    }
}
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal