Как отправить отчет в назначенное время - PullRequest
2 голосов
/ 14 мая 2019

В 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 отчет отправляется пользователям, определенным в config ok.

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

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

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

, который имеет метод дескриптора:

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

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

Модифицированный блок: Мой отчет выполняется по (локальному) URL: http://local -boxbooking2.com / admin / report / Available-Space-By-Zone Я переделал, чтобы, если запустить URL http://local -boxbooking2.com / Admin / Report / Available-Space-By-Zone / Send-электронная почта при открытии

в отчете браузера открывается и проверяется, что функция javascript «отправить электронную почту при открытии» запускается для отправки по электронной почте (с помощью сервиса Sendgrid) содержимого страницы (на самом деле отчета))

Я попытался вызвать команду с помощью задач cron: В app / Console / Commands / reportAvailableSpacesByZones.php:

class reportAvailableSpacesByZones extends Command
{
    public function handle()
    {
        \Log::info( 'Report From inside app/Console/Commands/reportAvailableSpacesByZones.php run # ' . time()  );
        return redirect()->to('/admin/report/available-spaces-by-zones/send-email-on-open');
    }

Я вижу информацию журнала, но нет отчетов по электронной почте.Какой путь правильный?

Спасибо!

1 Ответ

1 голос
/ 14 мая 2019

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

 'App\Console\Commands\reportAvailableSpacesByZones',

в методе scheudle add

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

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

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

на сервере crontab

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...