第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

從 Symfony 5 OutputInterface 獲取整個(gè)控制臺(tái)輸出

從 Symfony 5 OutputInterface 獲取整個(gè)控制臺(tái)輸出

PHP
瀟瀟雨雨 2022-12-03 11:05:24
我有一個(gè)像這樣的 Symfony 5 命令:use Symfony\Component\Console\Input\InputInterface;use Symfony\Component\Console\Output\OutputInterface;use Symfony\Component\Console\Style\SymfonyStyle;....    protected function execute(InputInterface $input, OutputInterface $output): int    {        $this->input        = $input;        $this->output       = $output;        $this->io           = new SymfonyStyle($input, $output);        ....    }此命令生成大量帶有$this->io->caution(...)、$this->io->block(....)等 的輸出$this->io->text(....)。有時(shí)(不總是:有一些運(yùn)行時(shí)條件),在執(zhí)行結(jié)束時(shí),我想訪問(wèn)命令生成的整個(gè)輸出,然后通過(guò)電子郵件發(fā)送。那么....我怎樣才能取回OutputInterface顯示的所有內(nèi)容?有$this->output->getBuffer()什么嗎?我可以毫無(wú)問(wèn)題地交換OutputInterface $output其他東西(logger,也許?),只要我仍然可以像我現(xiàn)在所做的那樣在 stdoutput (我的終端)上顯示所有內(nèi)容。
查看完整描述

1 回答

?
弒天下

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊

我認(rèn)為沒(méi)有現(xiàn)成的東西可以為您完成此任務(wù)。你可以用記錄器實(shí)現(xiàn)類似的東西......但是你必須擺弄配置錯(cuò)誤級(jí)別,可能注入多個(gè)記錄器,控制臺(tái)輸出永遠(yuǎn)不會(huì)匹配一個(gè)SymfonyStyle,等等。


您最好自己構(gòu)建,這應(yīng)該不是特別困難。只需構(gòu)建一些包裝/裝飾的東西SymfonyStyle;并捕獲輸出。


我將提供起始構(gòu)建塊,由您來(lái)完成實(shí)施:


class LoggingStyle

{

    private SymfonyStyle $style;

    private array        $logEntries = [];


    public function __construct(InputInterface $input, OutputInterface $output) {

        $this->style = new SymfonyStyle($input, $output);

    }


    private function addLog(string $type, string $message): void

    {

        $this->logEntries[] = [

            'type' => $type,

            'message' => $message,

            'time' => date('Y-m-d H:i:s')

        ];

    }


    public function flushLog():array

    {

        $log = $this->logEntries;

        $this->logEntries = [];


        return $log;

    }


    public function caution(string $message): void

    {

        $this->addLog('caution', $message);

        $this->style->caution($message);

    }


    public function text(string $message): void

    {

        $this->addLog('text', $message);

        $this->style->caution($message);

    }


    public function block(string $message): void

    {

        $this->addLog('block', $message);

        $this->style->caution($message);

    }

}


您需要實(shí)現(xiàn)SymfonyStyle您需要使用的界面的每個(gè)部分,并決定如何處理某些特殊行為(如果有的話)(例如,諸如 、 或進(jìn)度條之類的東西ask())table()。但這完全取決于您的實(shí)施。


還要決定如何格式化電子郵件中的每種不同輸出樣式,因?yàn)檫壿嬌蠜](méi)有辦法直接翻譯它。


您可以直接使用此類,如果達(dá)到需要聚合輸出的程度,您只需調(diào)用LoggingStyle::flushLog()并獲取數(shù)組形式的所有條目,以便您進(jìn)行相應(yīng)處理和發(fā)送。


查看完整回答
反對(duì) 回復(fù) 2022-12-03
  • 1 回答
  • 0 關(guān)注
  • 98 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)