Как отправить отчет в назначенное время

В laravel 5.8 у меня есть отчет с кнопкой «Отправить письмо», нажав на эту кнопку, запускается ajax-запрос, с содержимым отчета в «report_html» var, который можно контролировать следующим образом:

public function sentReportEmailContent()
{
    $request= request();
    $requestData= $request->all();

    $report_html= $requestData['report_html'];

    $loggedUser= Auth::user();

    $reportAvailableSpacesByZonesAcceptorsArray = config('app.reportAvailableSpacesByZonesAcceptorsArray', []);
    $site_name                                  = config('app.name', '');
    if ( count($reportAvailableSpacesByZonesAcceptorsArray) == 0 ) {
        return response()->json(['error_code' => 1, 'message' => 'There are no receiver emails specified !'], HTTP_RESPONSE_INTERNAL_SERVER_ERROR);
    }

    $to= $reportAvailableSpacesByZonesAcceptorsArray[0];
    $subject= 'Available Spaces By Zones report was sent at ' . $site_name;
    $additiveVars= [ 'html'=> $report_html ];

    unset($reportAvailableSpacesByZonesAcceptorsArray[0]);
    $cc= $reportAvailableSpacesByZonesAcceptorsArray;
    Mail::to($to)->send( new SendgridMail( 'emailContainer', $to, $cc, $subject , $additiveVars ) );

    return response()->json(['error_code' => 0, 'message' => '', 'user'=> $loggedUser->id], HTTP_RESPONSE_OK);
}

а с сервисом Sendgrid отчет отправляется пользователям, определенным в конфиге ок.

Теперь мне нужно запустить этот отчет и отправить письмо получателям в планировщике.

Я создал новую команду:

php artisan make:command reportAvailableSpacesByZones  --command=report:available-spaces-by-zones

у которого есть метод handle:

public function handle()
{
    Log::info( 'Report run # ' . time()  );
}

который срабатывает в запланированное время. Но как я могу запустить свой отчет и отправить его содержимое, как будто это делается вручную?

Спасибо!

Всего 1 ответ


В app / Console / Kernal.php добавьте команду в массив защищенных команд

 'AppConsoleCommands
eportAvailableSpacesByZones',

в методе Scheudle добавить

  $schedule->command('cron:reportAvailableSpacesByZones')->weeklyOn(2, ཐ:30');

другие доступные команды

https://laravel.com/docs/5.8/scheduling

на сервере crontab

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

Есть идеи?

10000