تخفیف ویژه

برنامه ریزی عملیات ها با استفاده از Laravel cron job

دسته بندی: آموزش
زمان مطالعه: 4 دقیقه
۰۸ بهمن ۱۳۹۷

هر اپلیکیشنی نیازمند یک مدیریت کننده عملیات( task scheduling) است که عملیات‌های اپلیکیشن را که به صورت دوره ای باید انجام شوند را مدیریت کند، Laravel cron job مکانیزمی است که این کار را در لاراول برای شما انجام می‌دهد.

فهرست محتوای این مقاله

Laravel cron job چیست و چگونه از آن استفاده کنیم؟

Laravel cron job یک مدیریت کننده عملیات است که باعث می‌شود تا اپلیکیشن‌های شما بتوانند عملیات‌های مورد نیاز خود را به صورت دوره ای با استفاده از این ابزار اجرا کنند. برای استفاده از ابزار Laravel cron job نیازمند سیستم عامل لینوکس و همچنین دانش کافی درباره پی اچ پی و لاراول هستید. با وارد شدن به پروژه خود و استفاده از دستور php artisan make:command WordOfTheDay می‌توانید یک فایل command جدید بسازید، با وارد شدن به این فایل می‌توانید کدهای زیر را مشاهده کنید:

<?php



namespace App\Console\Commands;



use Illuminate\Console\Command;



class WordOfTheDay extends Command

{

   /**

    * The name and signature of the console command.

    *

    * @var string

    */

   protected $signature = 'command:name';



   /**

    * The console command description.

    *

    * @var string

    */

   protected $description = 'Command description';



   /**

    * Create a new command instance.

    *

    * @return void

    */

   public function __construct()

   {

       parent::__construct();

   }



   /**

    * Execute the console command.

    *

    * @return mixed

    */

   public function handle()

   {

       //

   }

}

 این کد دستور زیر شامل نام و ویژگی دستور ما می‌باشد:

protected $signature = 'command:name';

جای کلمات command:name و word:day را عوض کنید. قطعه کد بالا همچنین شامل یک ویژگی توضیحات نیز می‌باشد که با دستور زیر نشان داده شده است.

protected $description = 'Send a Daily email to all users with a word and its meaning';

Laravel cron job

فراخوانی متد مدیریت کننده

همانطور که گفته شد Laravel cron job یک سیستم مدیریت کننده می‌باشد، در این سیستم متد مدیریت کننده هر بار که دستوری اجرا می‌شود فراخوانی می‌شود و به ما می‌گوید که کد می‌خواهد عملیات خاصی را انجام دهد. قطعه کد زیر را در نظر بگیرید:

<?php



namespace App\Console\Commands;



use App\User;

use Illuminate\Console\Command;

use Illuminate\Support\Facades\Mail;



class WordOfTheDay extends Command

{

   /**

    * The name and signature of the console command.

    *

    * @var string

    */

   protected $signature = 'word:day';



   /**

    * The console command description.

    *

    * @var string

    */

   protected $description = 'Send a Daily email to all users with a word and its meaning';



   /**

    * Create a new command instance.

    *

    * @return void

    */

   public function __construct()

   {

       parent::__construct();

   }



   /**

    * Execute the console command.

    *

    * @return mixed

    */

   public function handle()

   {

       $words = [

           'aberration' => 'a state or condition markedly different from the norm',

           'convivial' => 'occupied with or fond of the pleasures of good company',

           'diaphanous' => 'so thin as to transmit light',

           'elegy' => 'a mournful poem; a lament for the dead',

           'ostensible' => 'appearing as such but not necessarily so'

       ];



       // Finding a random word

       $key = array_rand($words);

       $value = $words[$key];



       $users = User::all();

       foreach ($users as $user) {

           Mail::raw("{$key} -> {$value}", function ($mail) use ($user) {

               $mail->from('[email protected]');

               $mail->to($user->email)

                   ->subject('Word of the Day');

           });

       }



       $this->info('Word of the Day sent to All Users');

   }

}

حال برای این که شما بتوانید یک command بسازید تا در Laravel cron job از آن استفاده کنید باید آن را در کرنل رجیستر کنید:

<?php



namespace App\Console;



use Illuminate\Console\Scheduling\Schedule;

use Illuminate\Foundation\Console\Kernel as ConsoleKernel;



class Kernel extends ConsoleKernel

{

   /**

    * The Artisan commands provided by your application.

    *

    * @var array

    */

   protected $commands = [

       //

   ];



   /**

    * Define the application's command schedule.

    *

    * @param  \Illuminate\Console\Scheduling\Schedule  $schedule

    * @return void

    */

   protected function schedule(Schedule $schedule)

   {

       // $schedule->command('inspire')

       //    ->hourly();

   }



   /**

    * Register the commands for the application.

    *

    * @return void

    */

   protected function commands()

   {

       $this->load(__DIR__.'/Commands');



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

   }

}

در این فایل ما کلاس command را در ویژگی Commands رجیستر کردیم و به همین علت مدیریت کننده command‌ها آن‌ها را به صورت دوره ای اجرا خواهد کرد. این دستور در واقع تمامی عملیات‌های ما را توسط Laravel cron jpb مدیریت می‌کند.

این فایل را توسط محتوای زیر تغییر دهید، ما به راحتی ویژگی WordOfTheDay را به پروژه اضافه کردیم و آن را برنامه ریزی کردیم تا به صورت روزانه اجرا شود.

<?php



namespace App\Console;



use Illuminate\Console\Scheduling\Schedule;

use Illuminate\Foundation\Console\Kernel as ConsoleKernel;



class Kernel extends ConsoleKernel

{

   /**

    * The Artisan commands provided by your application.

    *

    * @var array

    */

   protected $commands = [

       Commands\WordOfTheDay::class,

   ];



   /**

    * Define the application's command schedule.

    *

    * @param  \Illuminate\Console\Scheduling\Schedule  $schedule

    * @return void

    */

   protected function schedule(Schedule $schedule)

   {

       $schedule->command('word:day')

           ->daily();

   }



   /**

    * Register the commands for the application.

    *

    * @return void

    */

   protected function commands()

   {

       $this->load(__DIR__.'/Commands');



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

   }

}

حال اگر شما در قسمت فرمان پی اچ پی این دستورات را اجرا کنید خواهید دید که دستورات شما ثبت شده اند. راه اندازی پایگاه داده و پست الکترونیکی نیز در فایل .env صورت می‌گیرد که می‌توانید از طریق دستور زیر این کار را انجام دهید:

php artisan word:day

Laravel cron job

استفاده از متد Closure/callback Method

Laravel cron job به شما اجازه می‌دهد که یک متد را به صورت دوره ای فراخوانی کنید و آن را در فواصل زمانی معین اجرا کنید. در این جا ما فقط محتویات این کلاس را به شما نمایش می‌دهیم.

protected function schedule(Schedule $schedule)

{

   $schedule->command('word:day')

       ->daily();

}

در نهایت برای شروع مدیریت کننده و برنامه ریز لاراول نیز می‌توانید از دستور زیر در قسمت ترمینال پی اچ پی استفاده کنید:

Crontab -e

چه امتیازی به این مقاله می دید؟

نظرات کاربران

اولین دیدگاه این پست رو تو بنویس !

ارسال دیدگاه
خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :