我正在尝试在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
传递给我想打印输出的类。
答案 0 :(得分:8)
了解pnctual调试的问题,您始终可以使用echo
或var_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)