"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como criar uma tarefa agendada no Laravel?

Como criar uma tarefa agendada no Laravel?

Publicado em 2024-11-03
Navegar:770

Olá pessoal! Hoje, vou orientar você no processo de criação de uma tarefa agendada no Laravel. Tomaremos o exemplo do envio diário de um e-mail de marketing aos usuários.

Etapa 1: crie a classe de e-mail

Primeiro, vamos criar uma nova classe Mailable usando o seguinte comando Artisan:

php artisan make:mail DailyMarketingEmail --view

Este comando gera uma nova classe Mailable no diretório App/Mail, junto com um arquivo de visualização correspondente, daily-marketing-email.blade.php, dentro do diretório resources/views/mail/. Você pode personalizar o conteúdo do e-mail neste arquivo de visualização.

Etapa 2: crie um comando artesanal

A seguir, criaremos um comando Artisan que cuidará do envio de nosso DailyMarketingEmail. Execute o seguinte comando:

php artisan make:command SendDailyMarketingEmail

Este comando irá gerar uma nova classe de comando no diretório app/Console/Commands.

Etapa 3: compreender a estrutura do comando

Depois de gerar seu comando, você verá duas propriedades principais na classe gerada:

protected $signature: Define o nome e a assinatura do seu comando Artisan.
protected $description: fornece uma descrição do seu comando.
O método handle nesta classe é onde você definirá a lógica do seu comando.

Depois que tudo estiver configurado, você pode listar todos os seus comandos do Artisan executando:

artesão php

Você deverá ver seu comando na lista:

How to create a scheduled Task in Laravel ?

Etapa 4: implementar a lógica de comando

Agora, vamos definir a lógica dentro do método handle para enviar os e-mails de marketing:

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

    }
}

No método handle, recuperamos todos os usuários do banco de dados e enviamos para cada um deles o DailyMarketingEmail.

Etapa 5: Testando o Comando

Você pode testar manualmente seu comando executando:

php artisan app:send-daily-marketing-emails

Considere usar ferramentas como Mailtrap ou MailHog para capturar e visualizar os e-mails enviados durante o teste.

Etapa 6: agende o comando

Por fim, para automatizar o envio diário deste e-mail, precisamos agendar o comando no método de agendamento do arquivo Kernel.php localizado no diretório 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');
    }
}

Aqui, usamos o método dailyAt('08:30') para agendar o comando para ser executado todos os dias às 08h30. Você pode ajustar o tempo conforme necessário.

Sugestões Adicionais:

  1. Enfileirar e-mails: para um grande número de usuários, é uma boa prática colocar os e-mails na fila em vez de enviá-los todos de uma vez. Isso pode ser feito implementando a interface ShouldQueue na classe Mailable.

  2. Considerações sobre desempenho: para grandes bases de usuários, considere otimizar as consultas ao banco de dados e o processo de envio de e-mail para garantir um desempenho eficiente.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/kepsondiaz/how-to-create-a-scheduled-task-in-laravel--54a0?1 Se houver alguma violação, entre em contato com [email protected] para exclua-o
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3