Inyección de dependencia de comandos en Laravel: una vistazo más cercano a los comandos basados en clousures

  • Publicado el 10 diciembre, 2024
  • Palabras: 109

¿Necesitas inyectar dependencias en tus clousures de comandos Artisan? ¡Laravel lo hace sencillo! Exploremos cómo aprovechar la inyección de dependencias en tus clousures de comandos artisan.

Inyección de dependencia de comandos en Laravel: una vistazo más cercano a los comandos basados en clousures

#Uso básico

Los comandos basados ​​en closures ofrecen una alternativa a la definición de comandos de consola como clases. De la misma manera que los clousures de ruta son una alternativa a los controladores, piense en los closures de comandos como una alternativa a las clases de comandos.

 

A continuación se explica cómo puedes inyectar dependencias junto con los argumentos de tu comando:

 

use AppModelsUser;
use AppSupportDripEmailer;

Artisan::command('mail:send {user}', function (DripEmailer $drip, string $user) {
    $drip->send(User::find($user));
});

 

#Ejemplo práctico

A continuación se muestra cómo podría crear un comando de notificación del sistema:

 

use AppServicesNotificationService;
use AppModelsUser;
use AppEnumsPriority;

Artisan::command('notify:users {type} {--priority=normal}', function (
    NotificationService $notifier,
    string $type,
) {
    $priority = Priority::from($this->option('priority'));
    $users = User::whereNotNull('email')->get();

    foreach ($users as $user) {
        $notifier->send(
            user: $user,
            type: $type,
            priority: $priority
        );

        $this->info("Notification sent to {$user->email}");
    }
});

 

Este enfoque te permite combinar la simplicidad de los comandos basados en clousures con el poder del sistema de inyección de dependencias de Laravel, haciendo que sus comandos sean concisos y fáciles de mantener.

Antonio Jenaro
Antonio Jenaro

Web Developer

Archivado en:

Fuente: Harris Raftopoulos

Inicia la conversación

Hazte miembro de Antonio Jenaro para comenzar a comentar.

Regístrate ahora

¿Ya estás registrado? Inicia sesión