"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo crear una tarea programada en Laravel?

¿Cómo crear una tarea programada en Laravel?

Publicado el 2024-11-03
Navegar:902

¡Hola a todos! Hoy te guiaré a través del proceso de creación de una tarea programada en Laravel. Tomaremos el ejemplo del envío de un correo electrónico de marketing diario a los usuarios.

Paso 1: crear la clase de correo electrónico

Primero, creemos una nueva clase Mailable usando el siguiente comando Artisan:

php artisan make:mail DailyMarketingEmail --view

Este comando genera una nueva clase Mailable en el directorio App/Mail, junto con un archivo de vista correspondiente, daily-marketing-email.blade.php, dentro del directorio resources/views/mail/. Puede personalizar el contenido del correo electrónico dentro de este archivo de vista.

Paso 2: crea un comando artesanal

A continuación, crearemos un comando Artisan que se encargará de enviar nuestro correo electrónico de marketing diario. Ejecute el siguiente comando:

php artisan make:command SendDailyMarketingEmail

Este comando generará una nueva clase de comando en el directorio aplicación/Consola/Comandos.

Paso 3: comprender la estructura de mando

Después de generar su comando, verá dos propiedades clave en la clase generada:

firma $ protegida: esto define el nombre y la firma de su comando Artisan.
descripción $ protegida: proporciona una descripción de su comando.
El método handle en esta clase es donde definirás la lógica de tu comando.

Después de configurar todo, puedes enumerar todos tus comandos de Artisan ejecutando:

php artesano

Deberías ver tu comando en la lista:

How to create a scheduled Task in Laravel ?

Paso 4: implementar la lógica del comando

Ahora, definamos la lógica dentro del método de manejo para enviar los correos electrónicos de marketing:

each(function ($user) {
            Mail::to($user->email)->send(new DailyMarketingEmail);
        });

    }
}

En el método handle, recuperamos todos los usuarios de la base de datos y enviamos a cada uno el DailyMarketingEmail.

Paso 5: probar el comando

Puedes probar manualmente tu comando ejecutando:

php artisan app:send-daily-marketing-emails

Considere utilizar herramientas como Mailtrap o MailHog para capturar y ver los correos electrónicos enviados durante la prueba.

Paso 6: programe el comando

Finalmente, para automatizar el envío diario de este correo electrónico, necesitamos programar el comando en el método de programación del archivo Kernel.php ubicado en el directorio app/Console/:

command('app:send-daily-marketing-emails')->dailyAt('08:30'); 
    }

    /**
     * Register the commands for the application.
     */
    protected function commands(): void
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}

Aquí usamos el método dailyAt('08:30') para programar el comando para que se ejecute todos los días a las 08:30 a.m. Puedes ajustar el tiempo según sea necesario.

Sugerencias adicionales:

  1. Correos electrónicos en cola: para una gran cantidad de usuarios, es una buena práctica poner los correos electrónicos en cola en lugar de enviarlos todos a la vez. Esto se puede hacer implementando la interfaz ShouldQueue en la clase Mailable.

  2. Consideraciones de rendimiento: para bases de usuarios grandes, considere optimizar las consultas de la base de datos y el proceso de envío de correo electrónico para garantizar un rendimiento eficiente.

Declaración de liberación Este artículo se reproduce en: https://dev.to/kepsondiaz/how-to-create-a-scheduled-task-in-laravel--54a0?1 Si hay alguna infracción, comuníquese con [email protected] para borrarlo
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3