没有OutputInterface的Symfony2控制台输出

时间:2013-08-14 16:42:29

标签: symfony

我正在尝试在Symfony控制台命令中将某些信息打印到控制台。通常你会做这样的事情:

protected function execute(InputInterface $input, OutputInterface $output)
{
    $name = $input->getArgument('name');
    if ($name) {
        $text = 'Hello '.$name;
    } else {
        $text = 'Hello';
    }

    if ($input->getOption('yell')) {
        $text = strtoupper($text);
    }

    $output->writeln($text);
}

For the full Code of the Example - Symfony Documentation

很遗憾,我无法访问OutputInterface。是否可以将消息打印到控制台?

不幸的是我无法将OutputInterface传递给我想打印输出的类。

2 个答案:

答案 0 :(得分:8)

了解pnctual调试的问题,您始终可以使用echovar_dump

打印调试消息

如果您打算在没有Symfony应用程序的情况下使用带有全局调试消息的命令,可以使用以下方法。

Symfony提供3种不同的OutputInterface s

调试到文件

这样做,无论何时在命令中调用$output->writeln(),它都会在/path/to/debug/file.log

中写一个新行
use Symfony\Component\Console\Output\StreamOutput;
use Symfony\Component\Console\Input\ArrayInput;
use Acme\FooBundle\Command\MyCommand;

$params = array();
$input  = new ArrayInput($params);

$file   = '/path/to/debug/file.log';
$handle = fopen($file, 'w+');
$output = new StreamOutput($handle);

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

fclose($handle);

在控制台中调试

除了您使用ConsoleOutput而不是

之外,这是一个相同的过程
use Symfony\Component\Console\Output\ConsoleOutput;
use Symfony\Component\Console\Input\ArrayInput;
use Acme\FooBundle\Command\MyCommand;

$params = array();
$input  = new ArrayInput($params);

$output = new ConsoleOutput();

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

无调试

不会打印任何讯息

use Symfony\Component\Console\Output\NullOutput;
use Symfony\Component\Console\Input\ArrayInput;
use Acme\FooBundle\Command\MyCommand;

$params = array();
$input  = new ArrayInput($params);

$output = new NullOutput();

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

答案 1 :(得分:1)