5

我正在尝试在 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);
}

示例的完整代码 - Symfony 文档

不幸的是,我无法访问OutputInterface. 是否可以将消息打印到控制台?

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

4

2 回答 2

8

了解了 ponctual 调试的问题,您可以随时使用echo或打印调试消息var_dump

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

Symfony 提供 3 种不同OutputInterface

调试到文件

这样做,每当您调用$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);
于 2013-08-14T17:11:36.317 回答
1

查看 JMSAopBundle https://github.com/schmittjoh/JMSAopBundle并查看这篇很棒的文章http://php-and-symfony.matthiasnoback.nl/2013/07/symfony2-rich-console-command-output-using-奥普/

于 2013-08-16T13:44:09.797 回答