coala/console-bundle

控制台扩展,例如将外部事件转换为控制台输出

该软件包的官方仓库似乎已丢失,因此软件包已被冻结。

安装: 969

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 0

分支: 0

开放问题: 0

类型:symfony-bundle

dev-master 2013-01-10 07:20 UTC

This package is not auto-updated.

Last update: 2019-03-01 00:26:40 UTC


README

扩展安装

composer.json

{
    require: {
        "coala/console-bundle": "dev-master"
    }
}

AppKernel.php

<?php

$bundles = array(
    new Coala\ConsoleBundle\CoalaConsoleBundle(),
);

ConsoleEventTransformer

为什么需要它?

有时您从控制台启动长时间运行的服务命令,并希望实时显示服务状态消息。

为了使服务通用,它应在某些操作上抛出不同的事件。这些事件可以是任何内容,甚至是唯一的日志事件。

此扩展包为您提供了一个工具,可以将“外部”事件转换为可以在控制台上显示的MessageEvent。

您只需要进行一些配置和一些自定义事件转换类。

如何使用它?

假设您有一个服务抛出一个自定义事件AcmeOrderImportEvent,ID为"acme.order.import"。

您需要实现一个事件转换类,该类接受AcmeOrderImportEvent并将其转换为该扩展包提供的MessageEvent。

您可以将此转换类放置在任何您希望的位置,例如直接放在您的“Command”文件夹中。

您的转换类应该实现接口 Coala\ConsoleBundle\ConsoleEventTransformer\Event\MessageEventTransformerInterface

示例(例如,您的AcmeOrderImportEvent提供了一个getOrder()->getId()方法)

  namespace App\AcmeBundle\Command;

  use Coala\ConsoleBundle\ConsoleEventTransformer\Event\MessageEventTransformerInterface;
  use Coala\ConsoleBundle\ConsoleEventTransformer\Event\MessageEvent;

  use App\Event\AcmeOrderImportEvent;

  class AcmeOrderImportEventTransformer implements MessageEventTransformerInterface
  {
      /**
       * @param \App\Event\AcmeOrderImportEvent $updateEvent
       * @return MessageEvent
       */
      public function transform($updateEvent)
      {
          $message = "Importing order: " . $updateEvent->getOrder()->getId();
          return new MessageEvent(MessageEvent::INFO, $message);
      }
  }

然后您需要将此事件转换器与服务ID acme.order.import 注册。这需要在您的 config.yml 中完成。

  coala_console:
      events:
          acme.order.import: App\AcmeBundle\Command\AcmeOrderImportEventTransformer

最后,您应该更改您的命令以扩展自 Coala\ConsoleBundle\ConsoleEventTransformer\Command\MessageEventCommand

  use Coala\ConsoleBundle\Command\MessageEventCommand;

  class AcmeTestCommand extends MessageEventCommand
  {
      /* ... all your normal command code in here ... */
  }

就这样!