从你的处理者那里获得结果
编辑本页从你的处理者那里获得结果
处理消息时,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;使用应用程序\MessageHandler\ListItemsQueryResult;使用ob娱乐下载\组件\信使\HandleTrait;使用ob娱乐下载\组件\信使\MessageBusInterface;类listitem{使用HandleTrait;公共函数__construct(MessageBusInterface$messageBus){$这->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娱乐下载\组件\信使\MessageBusInterface;类QueryBus{使用HandleTrait;公共函数__construct(MessageBusInterface$messageBus){$这->messageBus =$messageBus;}/ * * *@param对象|信封查询* *@return处理程序返回值*/公共函数查询($查询){返回$这->处理($查询);}}
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。