«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как создать запланированное задание в Laravel?

Как создать запланированное задание в Laravel?

Опубликовано 3 ноября 2024 г.
Просматривать:673

Всем привет! Сегодня я собираюсь познакомить вас с процессом создания запланированной задачи в Laravel. Мы возьмем пример отправки пользователям ежедневного маркетингового электронного письма.

Шаг 1. Создайте класс электронной почты

Во-первых, давайте создадим новый класс Mailable, используя следующую команду Artisan:

php artisan make:mail DailyMarketingEmail --view

Эта команда создает новый класс Mailable в каталоге App/Mail вместе с соответствующим файлом представления daily-marketing-email.blade.php внутри каталога resources/views/mail/. Вы можете настроить содержимое электронного письма в этом файле просмотра.

Шаг 2. Создайте Artisan-команду

Далее мы создадим команду Artisan, которая будет обрабатывать отправку нашего сообщения DailyMarketingEmail. Выполните следующую команду:

php artisan make:command SendDailyMarketingEmail

Эта команда создаст новый класс команд в каталоге app/Console/Commands.

Шаг 3. Понимание структуры команд

После создания команды вы увидите два ключевых свойства в сгенерированном классе:

protected $signature: определяет имя и подпись вашей команды Artisan.
protected $description: содержит описание вашей команды.
В методе handle в этом классе вы определяете логику вашей команды.

После того, как все настроено, вы можете просмотреть все свои команды Artisan, выполнив:

php ремесленник

Вы должны увидеть свою команду в списке:

How to create a scheduled Task in Laravel ?

Шаг 4. Реализация командной логики

Теперь давайте определим логику метода handle для отправки маркетинговых писем:

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

    }
}

В методе handle мы извлекаем всех пользователей из базы данных и отправляем каждому DailyMarketingEmail.

Шаг 5. Тестирование команды

Вы можете вручную проверить свою команду, выполнив:

php artisan app:send-daily-marketing-emails

Рассмотрите возможность использования таких инструментов, как Mailtrap или MailHog, для перехвата и просмотра отправленных электронных писем во время тестирования.

Шаг 6: Запланируйте команду

Наконец, чтобы автоматизировать ежедневную отправку этого электронного письма, нам нужно запланировать команду в методе Schedule файла Kernel.php, расположенного в каталоге 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');
    }
}

Здесь мы используем метод dailyAt('08:30') для планирования выполнения команды каждый день в 08:30. Вы можете настроить время по мере необходимости.

Дополнительные предложения:

  1. Постановка электронных писем в очередь: для большого количества пользователей рекомендуется ставить электронные письма в очередь, а не отправлять их все сразу. Это можно сделать, реализовав интерфейс MustQueue в классе Mailable.

  2. Аспекты производительности: для больших баз пользователей рассмотрите возможность оптимизации запросов к базе данных и процесса отправки электронной почты, чтобы обеспечить эффективную производительность.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/kepsondiaz/how-to-create-a-scheduled-task-in-laravel--54a0?1 Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалите это
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3