Laravel: отправить слабое уведомление после завершения запланированной задачи - PullRequest
3 голосов
/ 11 октября 2019

Мне нужно запланировать несколько задач для приложения, созданного с использованием Laravel, и я хотел бы отправить уведомление о слабом завершении после завершения этих задач с выводом.

Laravel предоставляет ловушку "после" (https://laravel.com/docs/5.8/scheduling#task-hooks), поэтому я могу сделать что-то вроде этого:

$schedule->command('mycommand')
     ->daily()
     ->after(function () {
         // How can I access the command's name and output from here?
     });

Я пытался с $this->output, но $this указывает на App\Console\Kernel, и он говорит Undefined property: App\Console\Kernel::$output. Я также пыталсяпередать параметр в замыкание, но я думаю, что мне нужно указать тип, но я понятия не имею, и документация не очень ясна.

Кто-нибудь имеет какие-либо идеи о том, как это сделать?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Предполагая, что это есть в вашей команде

$this->info('hello');

В вашем ядре вы можете отправить вывод во временный файл, а затем прочитать файл и отправить его

/** @var \Illuminate\Console\Scheduling\Event $command */
$command = $schedule->command('mycommand')
    ->daily()
    ->sendOutputTo('storage/app/logs.txt');

$command->after(function () use ($command) {
    \Log::debug([$command->command, $command->output]);
    \Log::debug(file_get_contents($command->output));
});

Выполучит

[2019-10-11 13:03:38] local.DEBUG: array (
  0 => '\'/usr/bin/php7.3\' \'artisan\' command:name',
  1 => 'storage/app/logs.txt',
)  
[2019-10-11 13:03:38] local.DEBUG: hello 

Возможно, настало время заново открыть это предложение https://github.com/laravel/ideas/issues/122#issuecomment-228215251

0 голосов
/ 11 октября 2019

Какой вывод генерирует ваша команда? это командная строка или просто переменная, которую вы пытаетесь передать after()?

Альтернативно в вашем handle() методе команды вы можете вызвать нужную команду после того, как весь код был выполненВы даже можете передать параметр в команду.

Вы можете сделать это, используя Artisan

Artisan::call('*command_name_here*');
...