coala / console-bundle
控制台扩展,例如将外部事件转换为控制台输出
该软件包的官方仓库似乎已丢失,因此软件包已被冻结。
Requires
- php: >=5.3.2
- symfony/framework-bundle: >=2.1
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 ... */ }
就这样!