Symfony命令行程序从服务输出

时间:2014-04-11 04:54:08

标签: php symfony

我有一个Symfony服务,可以处理文件并处理其信息。我从控制器调用此服务,并与命令类分开调用。实际服务需要很长时间才能运行,我想在处理文件时在命令行上显示一些状态输出。如果不在我的服务中添加echo命令,最好的方法是什么?

编辑 这似乎是解决方案:http://symfony.com/blog/new-in-symfony-2-4-show-logs-in-console

2 个答案:

答案 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)
    );

    //...
}

显然,你指挥你的服务会有更多的东西,但这就是如何将它们联系在一起的基础。

这里可以看到一个实际的用例..

命令 - https://github.com/Richtermeister/Sylius/blob/subscription-bundle/src/Sylius/Bundle/SubscriptionBundle/Command/ProcessSubscriptionsCommand.php

服务 - https://github.com/Richtermeister/Sylius/blob/subscription-bundle/src/Sylius/Bundle/SubscriptionBundle/Processor/SubscriptionProcessor.php

答案 1 :(得分:0)