Інтерактивні команди консолі в Laravel

2
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 17 грудня, 2025
Створення інструментів командного рядка в Laravel може ставити певні виклики, особливо при обробці неналежного чи відсутнього вводу від користувача. Дізнайтеся, як за допомогою інтерфейсу PromptsForMissingInput перетворити ваші Artisan команди в інтуїтивно зрозумілі діалоги, які полегшать взаємодію з користувачем!

При створенні командних інструментів у Laravel однією з поширених проблем є коректна обробка відсутнього або некоректного введення даних користувача. Трейти PromptsForMissingInput від Laravel вирішують цю ситуацію, перетворюючи стандартні команди Artisan на інтерактивні діалоги.

Замість того, щоб завершуватися з помилкою через відсутність аргументів, ваші команди можуть взаємодіяти з користувачами, надаючи корисні підказки та ведучи їх через необхідні дані. Цей підхід особливо корисний для складних завдань обслуговування, сценаріїв розгортання або будь-якої ситуації, де важливо забезпечити точність вводу команди, зберігаючи професійний та дружній до користувача інтерфейс.

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' => 'Який тип контенту ви публікуєте?',
            'status' => 'Чи має це бути опублікованим як чернетка чи в реальному режимі?'
        ];
    }
}

Розглянемо практичний приклад команди для резервного копіювання бази даних з інтерактивними запитаннями:

<?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? : З\'єднання з базою даних для резервного копіювання}
        {--tables=* : Конкретні таблиці для резервного копіювання}
        {--compress : Стиснути резервну копію}';
        
    protected $description = 'Створити резервну копію бази даних';

    protected function promptForMissingArgumentsUsing(): array
    {
        return [
            'connection' => fn () => choice(
                'Яке з\'єднання до бази даних потрібно резервно копіювати?',
                [
                    'mysql' => 'Основна база даних MySQL',
                    'sqlite' => 'Тестова база даних SQLite',
                    'pgsql' => 'База даних PostgreSQL для аналітики'
                ],
                'mysql'
            ),
            '--tables' => fn () => multiChoice(
                'Виберіть таблиці для резервного копіювання (залиште порожнім для всіх):',
                $this->getAvailableTables()
            ),
            '--compress' => fn () => confirm(
                'Бажаєте стиснути резервну копію?',
                true
            )
        ];
    }

    private function getAvailableTables(): array
    {
        // Отримати таблиці з бази даних
        return ['users', 'posts', 'comments', 'orders'];
    }

    public function handle()
    {
        $connection = $this->argument('connection');
        $tables = $this->option('tables');
        $compress = $this->option('compress');
        $this->info("Розпочинаємо резервне копіювання бази даних {$connection}...");

        // Логіка резервного копіювання...
    }
}

Інтерфейс PromptsForMissingInput перетворює взаємодію командного рядка на зрозумілі діалоги, роблячи ваші команди Artisan більш інтуїтивними і легкими у використанні.

Популярні

Logomark Logotype

Інтеграція Laravel Socialite з бібліотекою Google Client PHP

Ви хочете навчитися, як інтегрувати Google OAuth у вашому проекті Laravel, використовуючи Socialite? Дізнайтеся, як налаштувати доступ до сервісів Google, таких як Календар, у нашій сьогоднішній статті

Logomark Logotype

Використання штучного інтелекту для управління перекладами в Laravel

Досліджуйте нові можливості локалізації вашого Laravel-додатку з пакунками, які використовують штучний інтелект, такими як ChatGPT та Claude. Які рішення можуть спростити ваш процес перекладу та зробити його більш точним? Читайте далі, щоб дізнатися більше!

Logomark Logotype

Nuxt 3 + Laravel Sanctum: Просте та надійне рішення для автентифікації вашого SPA та API

У сучасній веб-розробці аутентифікація є ключовою для захисту додатків і даних користувачів. Дізнайтеся, як модуль nuxt-sanctum-authentication спростить інтеграцію між Nuxt 3 та Laravel Sanctum, забезпечуючи надійний і зручний спосіб реалізації аутентифікації для вашого проєкту