Впровадження залежностей у замиканні команд Laravel

Перекладено ШІ 1 Laravel News 26 червня, 2026

Ви коли-небудь замислювалися, як максимально ефективно використовувати Artisan команди в Laravel? Досліджте, як впровадження залежностей у команди на основі closure може значно спростити вашу розробку і підвищити тестованість вашого коду

Команди Artisan на основі closures у Laravel підтримують повну ін'єкцію залежностей, що дає змогу впроваджувати сервіси безпосередньо в параметри команд разом із традиційними аргументами та опціями.

Контейнер сервісів автоматично розв'язує залежності, якщо ви вказуєте їх у параметрах closures:

use App\Services\EmailService;

Artisan::command('email:digest {recipient}', function (EmailService $emailer, string $recipient) {
    $emailer->sendDigest($recipient);
});

Ця функція поєднує зручність інлайн-команд із потужною системою розв'язання залежностей Laravel.

use App\Services\ReportGenerator;
use App\Services\FileUploader;
use App\Models\Customer;

Artisan::command('reports:generate {customer_id} {--format=pdf}', function (
    ReportGenerator $generator,
    FileUploader $uploader,
    string $customer_id
) {
    $customer = Customer::findOrFail($customer_id);
    $format = $this->option('format');

    $this->info("Генерація звіту у форматі {$format} для {$customer->name}");

    $reportData = $generator->createCustomerReport($customer, $format);

    $filename = "customer-{$customer_id}-report." . $format;
    $uploadPath = $uploader->store($reportData, 'reports/' . $filename);

    $this->info("Звіт успішно згенеровано");
    $this->line("Розташування файлу: {$uploadPath}");

    if ($this->confirm('Відправити звіт електронною поштою?')) {
        $customer->notify(new ReportGeneratedNotification($uploadPath));
        $this->info("Сповіщення надіслано");
    }
});

Artisan::command('cleanup:temp-files {--days=7}', function (
    FilesystemManager $filesystem,
    CacheManager $cache
) {
    $days = (int) $this->option('days');
    $cutoffDate = now()->subDays($days);

    $this->info("Очищення файлів старше {$days} днів");

    $tempPath = storage_path('app/temp');
    $files = $filesystem->disk('local')->allFiles('temp');

    $deletedCount = 0;
    foreach ($files as $file) {
        $lastModified = $filesystem->disk('local')->lastModified($file);

        if ($lastModified < $cutoffDate->timestamp) {
            $filesystem->disk('local')->delete($file);
            $deletedCount++;
        }
    }

    $cache->tags(['temp-files'])->flush();

    $this->info("Очищення завершено: видалено {$deletedCount} файлів");
});

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

Популярні

Інше, що варто прочитати

10 Оновлено 26 червня, 2026

Остаточний посібник з вебхуків у Laravel

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

41 Оновлено 26 червня, 2026

Що нового в PHP 8.5

PHP 8.5 обіцяє безліч нових можливостей, таких як оператор Pipe, функції `array_first()` та `array_last()`, а також нове розширення URI. Чи готові ви дізнатися, як ці функції можуть спростити вашу розробку? Читайте далі, щоб дізнатися більше про ці захоплюючі нововведення

99 Оновлено 26 червня, 2026

Все, що потрібно знати про Laravel 13

Laravel 13 вийде в березні 2026 року й вимагатиме мінімум PHP 8.3. Хочете дізнатися, як PHP‑атрибути для моделей, нові налаштування черг і метод Cache::touch() вплинуть на вашу розробку?