Как я могу отправить все свои выходные данные команды Artisan в Slack? (Используя Laravel) - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь расширить свои команды Laravel Artisan с помощью черты. Эта черта должна захватывать все выходные данные командной строки и отправлять их в Slack.

У меня есть часть 'send messages to slack', работающая с этим пакетом .

Однако мне не удается захватить вывод консоли. Вот что у меня есть:

namespace App\Traits;

use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\BufferedOutput;
use Symfony\Component\Console\Output\OutputInterface;

trait NotifiesSlack
{
    /**
     * Execute the console command.
     *
     * @param  \Symfony\Component\Console\Input\InputInterface $input
     * @param  \Symfony\Component\Console\Output\OutputInterface $output
     * @return mixed
     */
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $consoleOutput = new BufferedOutput;

        $call = $this->laravel->call([$this, 'handle']);

        $this->notifySlack($consoleOutput->fetch());

        return $call;
    }

    public function notifySlack(string $output)
    {
        \Slack::send($output);
    }
}

Я переопределяю правильный метод? Существуют ли другие способы получения вывода консоли из класса Command?

Любая помощь приветствуется! Заранее спасибо.

1 Ответ

0 голосов
/ 06 ноября 2018

Вы наблюдаете обычный случай, когда не может переопределить метод через черту. Это очевидно , потому что метод execute уже объявлен в самом классе, что делает черту бесполезной .

Быстрый и простой способ - просто создать собственный абстрактный класс команд, который расширяет Illuminate\Console\Command; и заменяет метод execute на ваше усмотрение; впоследствии используйте абстрактный командный класс для ваших команд slack-reportable как base .

abstract class NotifiesSlackCommand extend Illuminate\Console\Command {

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        ...
    }
}

И настоящая команда, которую нужно отправить Slack

class ProcessImagesCommand extends NotifiesSlackCommand {
    public function handle() {/* do magic */}
}
...