如何在Symfony控制台命令中添加填充?

时间:2016-12-04 04:05:15

标签: console command output symfony

开发人员,嗨!

我希望在我的控制台命令中输出消息,因为它在Doctrine控制台命令中实现: enter image description here

我尝试使用PHP_EOL为控制台消息添加换行符,如下所示:

$output->writeln('<bg=green>' . PHP_EOL. 'The statistics of ' . $affiliateProgramName . ' for period from ' .
    $beginningDate->format('Y-m-d') . ' to ' . $endDate->format('Y-m-d') . ' has been downloaded.' . PHP_EOL . '</>');

结果如图所示: enter image description here

背景延伸到控制台的整个宽度,我没有像Doctrine命令那样得到填充。

你有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

我发现了这个,也许这就是你要找的东西;

/**
 * Formats a message as a block of text.
 *
 * @param string|array $messages The message to write in the block
 * @param string|null  $type     The block type (added in [] on first line)
 * @param string|null  $style    The style to apply to the whole block
 * @param string       $prefix   The prefix for the block
 * @param bool         $padding  Whether to add vertical padding
 */
public function block($messages, $type = null, $style = null, $prefix = ' ', $padding = false)
{
    $messages = is_array($messages) ? array_values($messages) : array($messages);
    $this->autoPrependBlock();
    $this->writeln($this->createBlock($messages, $type, $style, $prefix, $padding, true));
    $this->newLine();
}

You can find the entire file here.

答案 1 :(得分:1)

Six03,谢谢你的提示!当然,我不能认为这是一个充分的答案,但它帮助我找到了所有必要的信息。

首先,您必须使用上下文&#39;格式化程序&#39;来声明帮助程序。作为ContainerAwareCommand对象的属性:

$formatter = $this->getHelper('formatter');

然后,您必须使用将在控制台中显示的内容声明该数组。数组的每个元素都是消息的新行。接下来,您需要将您的消息和样式添加到已声明的&#39;格式化程序块中。像这样:

$infoMessage = array('INFO:', 'Date interval is ' . $interval->format('%a') . ' days.');
$formattedInfoBlock = $formatter->formatBlock($infoMessage, 'info', TRUE);

如果传递true作为第三个参数,则将使用更多填充格式化块(消息上方和下方有一个空行,左侧和右侧有2个空格)。 (Formatter Helper

现在,您应该执行的就是将具有所需设计的块传递给&#39;输出&#39;对象:

$output->writeln($formattedInfoBlock);

这是整个代码的一步一步:

/**
 * Setting the console styles
 *
 * 'INFO' style
 */
$infoStyle = new OutputFormatterStyle('white', 'blue');
$output->getFormatter()->setStyle('info', $infoStyle);

/**
 * 'SUCCESS' style
 */
$successStyle = new OutputFormatterStyle('white', 'green');
$output->getFormatter()->setStyle('success', $successStyle);

/**
 * Declaring the formatter
 */
$formatter = $this->getHelper('formatter');

/**
 * The output to the console
 */
$infoMessage = array('INFO:', 'Date interval is ' . $interval->format('%a') . ' days.');
$formattedInfoBlock = $formatter->formatBlock($infoMessage, 'info', TRUE);
$output->writeln($formattedInfoBlock);

现在我的命令中的消息具有适当的类型。 enter image description here