gpt4 book ai didi

php - 如何在 Symfony2 控制台应用程序中添加辅助输出?

转载 作者:行者123 更新时间:2023-12-04 04:40:30 25 4
gpt4 key购买 nike

我有一个带有一些命令的 Symfony2 控制台应用程序:

$application = new Application();

$application->add(new MyCommand1());
$application->add(new MyCommand2());

$application->run();

运行应用程序时,我希望将输出都重定向到控制台 到一个文件。

我可以用 StreamOutput为此,但如果我手动运行以下命令之一,我似乎只能提供这样的输出对象:

$input = ...;
$output = new StreamOutput(fopen('output.log', 'a'));

$command = new MyCommand1();
$command->run($input, $output);

但这不是我想要的。

是否可以向 Application 添加辅助输出?本身? 这样所有命令都输出到控制台和文件。

最佳答案

为了完成这项任务,我将创建自己的输出。

class MultipleOutput implements OutputInterface
{
protected $outputs = array();

public function __construct(array $outputs = array())
{
$this->setOutputs($outputs);
}

public function setOutputs(array $outputs = array())
{
foreach ($outputs as $output) {
$this->addOutput($outputs);
}
}

public function addOutput(OutputInterface $output)
{
$this->outputs[] = $output;
}

public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL)
{
foreach ($this->outputs as $output) {
$output->write($messages, $newline, $type);
}
}

public function writeln($messages, $type = self::OUTPUT_NORMAL)
{
foreach ($this->outputs as $output) {
$output->writeln($messages, $type);
}
}

public function setVerbosity($level)
{
foreach ($this->outputs as $output) {
$output->setVerbosity($level);
}
}

/**
* Returns only the first one
*/
public function getVerbosity()
{
foreach ($this->outputs as $output) {
return $output->getVerbosity();
}
}

public function setDecorated($decorated)
{
foreach ($this->outputs as $output) {
$output->setDecorated($decorated);
}
}

/**
* Returns only the first one
*/
public function isDecorated()
{
foreach ($this->outputs as $output) {
return $output->isDecorated();
}
}

public function setFormatter(OutputFormatterInterface $formatter)
{
foreach ($this->outputs as $output) {
$output->setFormatter($formatter);
}
}

/**
* Returns only the first one
*/
public function getFormatter()
{
foreach ($this->outputs as $output) {
return $output->getFormatter();
}
}
}

然后你可以在你的应用程序中使用它
$application = new Application();

$application->add(new MyCommand1());
$application->add(new MyCommand2());

$output = new MultipleOutput(array(new StreamOutput, new ConsoleOutput));

$application->run(new ArgvInput, $output);

关于php - 如何在 Symfony2 控制台应用程序中添加辅助输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18977658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com