从你的处理者那里获得结果

编辑本页

从你的处理者那里获得结果

处理消息时,HandleMessageMiddleware添加一个HandledStamp对于处理消息的每个对象。你可以使用它来获取处理程序返回的值:

1 2 3 4 5 6 7 8 9 10 11
使用ob娱乐下载组件信使MessageBusInterface使用ob娱乐下载组件信使邮票HandledStamp信封messageBus->调度(SomeMessage ());//获取上一个消息处理程序返回的值handledStamp信封->最后(HandledStamp::类);handledStamp->getResult ();//或获取所有处理程序的信息handledStamps信封->(HandledStamp::类);

使用命令和查询总线

Messenger组件可用于CQRS体系结构,其中命令和查询总线是应用程序的中心部分。读马丁·福勒的关于CQRS的文章了解更多如何配置多路总线

由于查询通常是同步的,并且预期只处理一次,因此从处理程序获得结果是一种常见需求。

一个HandleTrait存在以在同步处理时获取处理程序的结果。它还确保只注册了一个处理程序。的HandleTrait可以用在任何类,有messageBus美元属性:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
/ / src /行动/ ListItems.php名称空间应用程序行动使用应用程序消息ListItemsQuery使用应用程序MessageHandlerListItemsQueryResult使用ob娱乐下载组件信使HandleTrait使用ob娱乐下载组件信使MessageBusInterfacelistitem使用HandleTrait公共函数__construct(MessageBusInterfacemessageBus->messageBus =messageBus;}公共函数__invoke()结果->查询(ListItemsQuery (/ *……* /));//对结果进行处理/ /……//创建这样的方法是可选的,但是允许类型提示结果私人函数查询(ListItemsQuery查询ListItemsQueryResult返回->处理(查询);}}

因此,您可以使用trait来创建命令和查询总线类。例如,你可以创建一个特辑QueryBus类,并在需要查询总线行为而不是MessageBusInterface

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
/ / src / MessageBus / QueryBus.php名称空间应用程序MessageBus使用ob娱乐下载组件信使信封使用ob娱乐下载组件信使HandleTrait使用ob娱乐下载组件信使MessageBusInterfaceQueryBus使用HandleTrait公共函数__construct(MessageBusInterfacemessageBus->messageBus =messageBus;}/ * * *@param对象|信封查询* *@return处理程序返回值*/公共函数查询查询返回->处理(查询);}}
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
ob娱乐下载Symfony 6.0支持通过SensioLabs