Laravel 8에서 사용자 지정 명령을 만드는 방법

Laravel은 laravel 애플리케이션을 만드는 데 도움이 되는 유용한 명령 세트를 제공합니다. 우리는 장인의 도움을 받아 명령줄 인터페이스에서 이러한 명령을 자주 실행합니다.

메일을 통해 모든 사용자에게 매일 동기 부여 인용문을 보내고 싶다고 가정해 보겠습니다. 수동으로 수행하는 대신 laravel에서 제공하는 사용자 지정 명령을 만들 수 있습니다.

사용자 지정 명령을 만들려면 사용자 지정 명령 파일을 만드는 다음 명령을 실행해야 합니다.

php artisan make:command SendMotivatonalQuoteCommand


위의 명령은 두 개의 보호 변수SendMotivatonalQuoteCommandsignature를 포함하는 description 파일과 메인 로직을 작성할 수 있는 핸들 메소드를 생성합니다.

이제 SendMotivatonalQuoteCommand 파일을 엽니다.
  • 명령의 이름과 서명을 설정하고 이 명령이 생성된 목적에 대한 간단한 설명을 제공합니다.
  • 메인 로직을 handle() 메서드에 작성해 보겠습니다.
    인용문 배열에서 임의의 동기 부여 인용문을 선택하고 모든 사용자를 선택하는 논리를 작성해 봅시다. 더 나은 이해를 위해 아래 코드를 참조하십시오.

  • 
    <?php
    
    namespace App\Console\Commands;
    
    use Illuminate\Console\Command;
    
    use App\Models\User;
    use App\Notifications\SendDailyQuotesNotification;
    use Illuminate\Support\Facades\Notification;
    
    
    class SendDailyQuotes extends Command
    {
        /**
         * The name and signature of the console command.
         *
         * @var string
         */
        protected $signature = 'quotes:send-daily-quotes';
    
        /**
         * The console command description.
         *
         * @var string
         */
        protected $description = 'This command will send quotes daily to all the users registered
            to this application';
    
        /**
         * Create a new command instance.
         *
         * @return void
         */
        public function __construct()
        {
            parent::__construct();
        }
    
        /**
         * Execute the console command.
         *
         * @return int
         */
        public function handle()
        {
            $dailyQuotes = [
                'Theodore Roosevelt' => 'Do what you can, with what you have, where you are.',
                'Oscar Wilde' => 'Be yourself; everyone else is already taken.',
                'William Shakespeare' => 'This above all: to thine own self be true.',
                'Napoleon Hill' => 'If you cannot do great things, do small things in a great way.',
                'Milton Berle' => 'If opportunity doesn’t knock, build a door.'
            ];
    
            // generate the random key and get its quote in data variable
            $getRandamQuote = array_rand($dailyQuotes);
            $data = $dailyQuotes[$getRandamQuote];
    
    
            $users = User::all();       
            $users->each(function ($user) use ($data) {
                Notification::send($user, new SendDailyQuotesNotification($data));
            });
    
            $this->info('Successfully sent daily quote to everyone.');
    
        }
    }
    
    


    인용문과 함께 알림을 보내려면 다음 명령을 통해 알림을 생성해야 합니다.

    php artisan make:notification SendDailyQuotesNotification
    


    알림 파일을 열고 아래 코드 추가

    <?php
    
    namespace App\Notifications;
    
    use Illuminate\Bus\Queueable;
    use Illuminate\Contracts\Queue\ShouldQueue;
    use Illuminate\Notifications\Messages\MailMessage;
    use Illuminate\Notifications\Notification;
    
    use App\Models\User;
    
    class SendDailyQuotesNotification extends Notification
    {
        use Queueable;
    
        public $quote;
        /**
         * Create a new notification instance.
         *
         * @return void
         */
        public function __construct($data)
        {
           $this->quote = $data;
        }
    
        /**
         * Get the notification's delivery channels.
         *
         * @param  mixed  $notifiable
         * @return array
         */
        public function via($notifiable)
        {
            return ['mail'];
        }
    
        /**
         * Get the mail representation of the notification.
         *
         * @param  mixed  $notifiable
         * @return \Illuminate\Notifications\Messages\MailMessage
         */
        public function toMail($notifiable)
        {
            return (new MailMessage)
                        ->greeting("Hello {$notifiable->name}, ")
                        ->subject('Daily Quotes')
                        ->line('This daily quotes helps you to stay encouraged')
                        ->line('Quote of the day : ' . $this->quote)
                        ->action('Notification Action', url('/'))
                        ->line('Thank you for using our application!');
        }
    }
    


    이제 다음 명령을 실행하십시오.

    php artisan quotes:send-daily-quotes
    


    이 명령을 매일 자동으로 실행하려면 Laravel 스케줄러에서 명령을 설정하기만 하면 됩니다. app/Console/Kernel.php에서 이 작업을 수행할 수 있습니다.

    protected function schedule(Schedule $schedule)
    {     $schedule->command('users:send_doc_link')->daily()->at('07:00');
    }
    


    이렇게 하면 매일 오전 7시에 명령이 실행됩니다.

    이러한 방식으로 애플리케이션에 대한 사용자 지정 명령을 생성하고 실행하도록 예약하거나 매일 실행하도록 crontab을 설정할 수 있습니다.

    내 게시물이 마음에 드시기 바랍니다 😃 🦄

    감사합니다. 🦁 🦁

    좋은 웹페이지 즐겨찾기