我有一个Symfony服务,可以处理文件并处理其信息。我从控制器调用此服务,并与命令类分开调用。实际服务需要很长时间才能运行,我想在处理文件时在命令行上显示一些状态输出。如果不在我的服务中添加echo命令,最好的方法是什么?
编辑 这似乎是解决方案:http://symfony.com/blog/new-in-symfony-2-4-show-logs-in-console
答案 0 :(得分:7)
有像
这样的命令$output->write('Blah blah blah');
$output->writeLn('Blah blah blah'); // Above with a line break
您还可以添加颜色和进度条以及我可能从未使用的其他内容。 http://symfony.com/doc/current/components/console/introduction.html#coloring-the-output
<强>更新强>
您可以使用EventDisptcher
服务更新服务中事件的命令。
例如......
你命令
protected function execute(InputInterface $input, OutputInterface $output)
{
//....
$dispatcher = $this->getContainer->get('event_dispatcher');
$dispatcher->addListener(
'an.event.that.you.have.set.up',
function (GenericEvent $event) use ($output) {
$output->writeLn('<info>This event has happened</info');
}
});
//....
}
您的服务
protected $dispatcher;
//....
public function __construct(EventDispatcherInterface $dispatcher, ...)
{
$this->dispatcher = $dispatcher;
//...
}
public function someFunction()
{
//...
$variable = 'something you are using');
$dispatcher->dispatch(
'an.event.that.you.have.set.up',
new GenericEvent($variable)
);
//...
}
显然,你指挥你的服务会有更多的东西,但这就是如何将它们联系在一起的基础。
这里可以看到一个实际的用例..
答案 1 :(得分:0)