>  기사  >  백엔드 개발  >  Laravel에서 예약된 작업을 만드는 방법은 무엇입니까?

Laravel에서 예약된 작업을 만드는 방법은 무엇입니까?

WBOY
WBOY원래의
2024-08-30 06:39:32481검색

안녕하세요 여러분! 오늘은 Laravel에서 예약된 작업을 생성하는 과정을 안내해 드리겠습니다. 사용자에게 매일 마케팅 이메일을 보내는 경우를 예로 들어보겠습니다.

1단계: 이메일 클래스 생성

먼저 다음 Artisan 명령을 사용하여 새로운 Mailable 클래스를 생성해 보겠습니다.

php artisan make:mail DailyMarketingEmail --view

이 명령은 App/Mail 디렉토리에 새로운 Mailable 클래스를 생성하고 resources/views/mail/ 디렉토리에 해당 뷰 파일 daily-marketing-email.blade.php를 생성합니다. 이 보기 파일 내에서 이메일 내용을 사용자 정의할 수 있습니다.

2단계: 장인 명령 생성

다음으로 DailyMarketingEmail 전송을 처리하는 Artisan 명령을 생성하겠습니다. 다음 명령을 실행하세요:

php artisan make:command SendDailyMarketingEmail

이 명령은 app/Console/Commands 디렉터리에 새 명령 클래스를 생성합니다.

3단계: 명령 구조 이해

명령을 생성한 후 생성된 클래스에 두 가지 주요 속성이 표시됩니다.

protected $signature: Artisan 명령의 이름과 서명을 정의합니다.
protected $description: 명령에 대한 설명을 제공합니다.
이 클래스의 핸들 메소드는 명령의 논리를 정의하는 곳입니다.

모든 것이 설정된 후 다음을 실행하여 모든 Artisan 명령을 나열할 수 있습니다.

php 장인

목록에 명령이 표시됩니다.

How to create a scheduled Task in Laravel ?

4단계: 명령 논리 구현

이제 마케팅 이메일을 보내는 핸들 메소드 내 논리를 정의해 보겠습니다.

<?php

namespace App\Console\Commands;

use App\Models\User;
use Illuminate\Console\Command;
use App\Mail\DailyMarketingMail;
use Illuminate\Support\Facades\Mail;

class SendDailyMarketingEmails extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'app:send-daily-marketing-emails';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Send a marketing email to all users';

    /**
     * Execute the console command.
     */
    public function handle()
    {
        $users = User::get(); 

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

    }
}

handle 메소드에서는 데이터베이스에서 모든 사용자를 검색하고 각 사용자에게 DailyMarketingEmail을 보냅니다.

5단계: 명령 테스트

다음을 실행하여 명령을 수동으로 테스트할 수 있습니다.

php artisan app:send-daily-marketing-emails

Mailtrap 또는 MailHog와 같은 도구를 사용하여 테스트 중에 보낸 이메일을 확인하고 확인하는 것을 고려해 보세요.

6단계: 명령 예약

마지막으로 이 이메일 전송을 매일 자동화하려면 app/Console/ 디렉터리에 있는 Kernel.php 파일의 Schedule 메소드에서 명령을 예약해야 합니다.

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * Define the application's command schedule.
     */
    protected function schedule(Schedule $schedule): void
    {
        $schedule->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') 메서드를 사용하여 매일 오전 8시 30분에 명령이 실행되도록 예약합니다. 필요에 따라 시간을 조정하시면 됩니다.

추가 제안:

  1. 이메일 대기열: 사용자 수가 많은 경우 이메일을 한꺼번에 보내는 것보다 대기열에 넣어 두는 것이 좋습니다. 이는 Mailable 클래스에 ShouldQueue 인터페이스를 구현하여 수행할 수 있습니다.

  2. 성능 고려 사항: 대규모 사용자 기반의 경우 효율적인 성능을 보장하기 위해 데이터베이스 쿼리 및 이메일 전송 프로세스를 최적화하는 것을 고려하십시오.

위 내용은 Laravel에서 예약된 작업을 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.