Hello! 欢迎来到小浪资源网!


创建专注的领域应用程序 Symfony 方法(返回结果)


创建专注的领域应用程序 Symfony 方法(返回结果)

介绍

这是本系列的最后一篇文章。在上一篇文章中,我们创建了一个应用程序服务,它使用 userentitybuilder 服务来创建实体。然后,使用条令实体管理器(这是一个基础设施服务)来持久化和刷新实体。
现在,是时候将结果返回到表示层了。

我想记住,在本系列的所有文章中,我们都将学说实体视为域实体。我知道这并不完全正确,最好将域实体与学说实体分开,但为了简单起见,我将使用学说实体作为域实体来完成本文 我正在准备一篇新文章,我将在其中展示我如何构建完整的 symfony 应用程序,在那里您将看到域实体与学说完全解耦。

创建输出 dto 和输出构建器

在将结果返回到表示层之前,我们需要创建一个dto来表示我们想要返回的数据。假设我们只想返回 emailfirstnamelastnamedob 参数。我们的输出 dto 如下所示:

readonly class useroutputdto {      public function __construct(         public string $email,         public string $firstname,         public string $lastname,         public string $dob,     ){} } 

现在输出 dto 已准备就绪,是时候创建一个服务来构建实体的输出了。该服务将成为我们域的一部分,因为我们决定哪些信息将成为输出 dto 的一部分。

class useroutputdtobuilder {      public function build(user $user): useroutputdto     {         return new useroutputdto(             $user->getemail(),             $user->getfirstname(),             $user->getlastname(),             $user->getdob()         );     } } 

输出构建器非常简单,它创建一个 useroutputdto 将实体值中的参数传递给构造函数

此输出构建器可以是应用程序或表示层的一部分,因为它不包含任何逻辑,但我会将其保留在域中,就像对 userentitybuilder 所做的那样。
请记住,userentitybuilder 确实包含一些额外的逻辑:

  • 生成令牌
  • 生成当前时间戳

返回数据

准备好输出 dto 后,就可以将其定向到表示层了。在我们的例子中,哪些元素构成了表示层?考虑到我们将生成 symfony jsonresponse 并将其作为 http 响应返回,控制器将是代表我们表示层的元素。让我们回到正题。

class ApiController extends AbstractController {     #[Route('/api/entity', name: 'api_v1_post_entity', methods: ['POST'])]     public function saveAction(Request $request, DataProcessor $dataProcessor, UserCreator $userCreator): jsonResponse     {         $userInputDto = $dataProcessor->processData($request->getContent(), UserInputDTO::class);         $userOutputDto = $userCreator->createUser($userInputDto);         return $this->json($userInputDto);     } }  

作为表示层的一部分,symfony 控制器使用其基础设施部分(abstractcontroller json 函数)从输出 dto 数据生成 jsonresponse,准备在http 响应。
如您所见,symfony 控制器还使用其他应用程序服务(dataprocessorusercreator)来执行 api 调用过程。

结论

在本系列的最后一篇文章中,我们探讨了在 symfony 应用程序中将数据返回到表示层的过程。我们首先创建一个输出数据传输对象 (dto) 来封装我们想要返回的用户数据,特别是电子邮件、名字、姓氏和出生日期。然后,我们开发了一个 useroutputdtobuilder 服务来从用户实体构建此 dto,强调定义输出中包含哪些信息的重要性。
最后,我们演示了 symfony 控制器如何充当表示层,利用 jsonresponse 功能将 dto 数据作为 http 响应返回。

相关阅读